正規表現は、XMLで使用するbad ideaです。問題は、XML
の意味論的に同一の部分の束が合法的に変わる可能性があり、regex
を飛び越えることです。アップストリーム(合法的な、スペック内の)変更のためにある日中断するかもしれないので、そうすることによって脆いコードを作成します。
例えば:
<root>
<Test RequestId="1" RequestorId="test" ResponderId="Test">
</Test>
</root>
または:
<root>
<Test RequestId="1" RequestorId="test" ResponderId="Test"></Test>
</root>
または:
<root>
<Test
RequestId="1"
RequestorId="test"
ResponderId="Test"></Test>
</root>
または:
<root
><Test
RequestId="1"
RequestorId="test"
ResponderId="Test"
></Test></root>
または:
<root>
<Test RequestId="1" RequestorId="test" ResponderId="Test"/>
</root>
これらはすべて、意味的に同じですが、私はあなたのハード安全に(あなたがに実行するかもしれないし、他のもの)上記のすべてを扱うregex
で押されると思いますかなり確信して
さらに、
- ドキュメントツリーの他の場所でも同様に一致します。 (多くの場合、
Test
要素)
- 属性の順序付け/存在の変更。 (したがって、マッチはそれ以上働かない)。
<Test>
サブ要素を持つ要素です。ワイルドカードを使用しているため、属性ではなくサブ要素がキャッチされます。幸い
、あなたは代替持っている - xpath
- 式を定義する方法、ビットregex
のような、しかしXML
承知のように動作します。
私はXML::Twig
を提案します。これは、特に急な学習曲線がないためです。私は<試験RequestId = "1" RequestorIdのデータを得た場合
perl -MXML::Twig -0777 -e 'print XML::Twig -> parse (<>) -> get_xpath("//test",0) -> text' yourfile
:あなたの第二のために
:あなたの最初のために
これは、ワンライナー、IFYすることができます= "test" ResponderId = "Test">。これからRequestorIdの値を取得したいのですがどうすればいいのですか? – Developer
私の質問も更新しました – Developer
@Developer答えを更新しました。 – redneb