2013-03-22 94 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和返回搜索數據域我的姓和名稱在代碼爲4的子字段中具有價值300的人 - 因此,在這種情況下,答案將是Cronenberg David?

在此先感謝。

+0

你可能有興趣在更短的XPath表達式。 – 2013-03-22 15:26:33

回答

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

感謝隊友,作品像一個魅力。 – 2013-03-22 15:24:52

1

使用在:

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

所以,另一種方式來剝皮貓:)工作,歡呼隊友。 – 2013-03-23 08:05:04

+0

@Ales,不客氣,我只發佈了這個,因爲它稍短而且更簡化 - 不需要使用'./'和'「./subfield [@code="4」和。=「300」'可以簡單地寫成:'subfield [@ code = 4] = 300' – 2013-03-23 15:30:17