2017-02-16 8 views
-1

以下のXMLスニペットでは、ParentノードがE1EDKA2、PARVWがAGの場合、NAME1の値を変数に抽出して格納する必要があります。正規表現を使用して兄弟の子の値を抽出する必要があります

<DESADV01> 
<IDOC> 
<E1EDKA2 SEGMENT="1"> 
        <PARVW>AG</PARVW> 
        <PARTN>0001703217</PARTN> 
        <NAME1>WILBUR ELLIS RIO LINDA</NAME1> 
        <STRAS>841 W ELKHORN BLVD</STRAS> 
        <ORT01>RIO LINDA</ORT01> 
        <PSTLZ>956733005</PSTLZ> 
        <LAND1>US</LAND1> 
        <TELF1>9169919815</TELF1> 

       </E1EDKA2> 
</IDOC> 
</DESADV01> 

私はこれを試してみたが、それは仕事を得るcouldntの:

| rex field=_raw "<E1EDKA2>\s*<PARVW>AG</PARVW>\s*<NAME1>(?P<soldtoid>[^<]+)</NAME1>.*</E1EDKA2>" 

上記のスニペットの場合、答えはなりshud:soldtoid =ウィルバーELLIS RIO LINDA。

ご協力いただきありがとうございます。

+1

に簡素化することができると思います*ありません*「正規表現を使用して、兄弟の子値を抽出する必要があります」あなたは本当にしません。正規表現はXMLデータの処理には適していません。たとえ何か作業をしても、データがわずかに変化しても脆弱で破損する可能性があります。 – Borodin

答えて

5

独自のshittyを書くのではなく、既存のXMLパーサー(XML :: LibXMLなど)を使用してください。

次のXPathを使用して目的のノードにアクセスすることができます。

//E1EDKA2[PARVW/text()="AG"]/NAME1 

私は

//E1EDKA2[PARVW="AG"]/NAME1 
+0

私は正規表現が必要...私はxslt自分自身が良いですが、時折目隠しをしている正規表現です。 –

+0

私はあなたに正規表現ベースのXMLパーサーを書いていません – ikegami

+2

@SaiKishoreBeeram:なぜ私は正規表現が必要ですか? regexesを使用することは、XMLを解析するには完全に間違った方法です。 –

関連する問題