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?
在此先感谢。
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']
假设子字段出现的顺序文件
感谢队友,作品像一个魅力。 – 2013-03-22 15:24:52
使用在:
/*/*[@tag=702 and subfield[@code=4]=300]
/subfield[@code='a' or @code='b']/text()
所以,另一种方式来剥皮猫:)工作,欢呼队友。 – 2013-03-23 08:05:04
@Ales,不客气,我只发布了这个,因为它稍短而且更简化 - 不需要使用'./'和'“./subfield [@code="4”和。=“300”'可以简单地写成:'subfield [@ code = 4] = 300' – 2013-03-23 15:30:17
你可能有兴趣在更短的XPath表达式。 – 2013-03-22 15:26:33