2017-02-16 2 views
-1

В нижеприведенном фрагменте XML мне нужно извлечь и сохранить в переменной значение NAME1, когда родительский узел - E1EDKA2, а элемент PARVW равен AG.Необходимо извлечь дочернее значение sibling с помощью regex

<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> 

Я попытался это, но не мог заставить его работать:

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

Для приведенного выше фрагмента кода, ответ изгоняются быть: soldtoid = WILBUR ELLIS RIO LINDA.

Заранее благодарим за помощь.

+1

* «Нужно извлечь значение родного брата ребенка с помощью регулярных выражений» * Нет, вы действительно этого не делаете. Регулярные выражения не подходят для обработки XML-данных, и даже если у вас что-то работает, оно будет хрупким и, вероятно, сломается даже при малейшем изменении данных. – Borodin

ответ

5

Использовать существующий синтаксический анализатор XML (например, XML :: LibXML), а не писать собственный дерьмовый!

Вы можете получить доступ требуемого узла с помощью следующей XPath:

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

Я думаю, что может быть упрощено до

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

Мне нужно Regex ... Я хорошо разбираюсь в xslt, но это регулярное выражение, которое иногда меня завязывает с завязанными глазами. –

+0

Я не пишу вам синтаксический анализатор XML на основе регулярных выражений – ikegami

+2

@SaiKishoreBeeram: Почему вы говорите «Мне нужно регулярное выражение»? Использование регулярных выражений - это совершенно неправильный способ анализа XML. –

Смежные вопросы