2013-03-22 3 views
1

У меня проблемы, формирующие правильное выражение XPath для поиска данных в XML похожа на следующее:выражения XPATH найти узел

<record> 
<datafield tag="675" ind1=" " ind2=" "> 
    <subfield code="a">791.221.4(71+44+469+450)(086.82)</subfield> 
    <subfield code="c">791.2</subfield> 
    <subfield code="s">791.2</subfield> 
    <subfield code="b">791.2</subfield> 
    <subfield code="v">UDCMRF 2006</subfield> 
</datafield> 
<datafield tag="702" ind1="1" ind2="1"> 
    <subfield code="3">39609187</subfield> 
    <subfield code="a">Cronenberg</subfield> 
    <subfield code="b">David</subfield> 
    <subfield code="f">1943-</subfield> 
    <subfield code="4">300</subfield> 
    <subfield code="4">690</subfield> 
</datafield> 
<datafield tag="702" ind1="0" ind2="1"> 
    <subfield code="3">16448611</subfield> 
    <subfield code="a">Suschitzky</subfield> 
    <subfield code="b">Peter</subfield> 
    <subfield code="4">600</subfield> 
</datafield> 
<datafield tag="702" ind1="0" ind2="1"> 
    <subfield code="3">8497763</subfield> 
    <subfield code="a">Shore</subfield> 
    <subfield code="b">Howard</subfield> 
    <subfield code="4">230</subfield> 
</datafield> 
</record> 

Как построить выражение, которое в основном говорит: поиск Поле данные со значением тега 702 и возвратом меня фамилия и имя человека, которое имеет значение 300 в подполе с кодом 4 - так что ответом в этом случае будет Кроненберг Давид?

Заранее спасибо.

+0

Вы можете быть заинтересованы в более короткие выражения XPath. –

ответ

1
datafield[@tag="702"][./subfield[@code="4" and .="300"]] 

Выберете нужный элемент поля данных.

datafield[@tag="702"][./subfield[@code="4" and .="300"]]/subfield[@code="a" or @code="b"]/text() 

Вернется ['Cronenberg', 'David'] при условии, что подполя появляются в том порядке, в документе

+0

Спасибо, помощник, работает как шарм. –

1

Использование:

/*/*[@tag=702 and subfield[@code=4]=300] 
     /subfield[@code='a' or @code='b']/text() 
+0

Итак, еще один способ кошки кошки :) Работает также, приветствует помощника. –

+0

@Ales, приветствую, приятель - я только разместил это, потому что он немного короче и более упорядочен - не нужно использовать '. /' И './subfield[@code="4" и . = "300" 'можно просто написать как:' подполе [@ code = 4] = 300' –