XPath表达式来找到节点

问题描述:

我有形成正确的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

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

使用在:

/*/*[@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