Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 查找节点的XPATH表达式_Xml_Xpath - Fatal编程技术网

Xml 查找节点的XPATH表达式

Xml 查找节点的XPATH表达式,xml,xpath,Xml,Xpath,我在形成正确的xpath表达式以查找xml中的数据时遇到了问题,如下所示: <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 cod

我在形成正确的xpath表达式以查找xml中的数据时遇到了问题,如下所示:

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

791.221.4(71+44+469+450)(086.82)
791.2
791.2
791.2
UDCMRF 2006
39609187
克朗伯格
大卫
1943-
300
690
16448611
苏希茨基
彼得
600
8497763
岸
霍华德
230
如何构建一个基本上是这样的表达式:搜索标记值为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']
,假设子字段在文档中按该顺序出现

使用

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

您可能对较短的XPath表达式感兴趣。因此,另一种剥猫皮的方法:)也可以,干杯,伙计。@Ales,不客气,伙计——我之所以发布此消息,是因为它稍微短了一点,而且更精简了一点——不需要使用
/
”/子字段[@code=“4”和[@code=“300”“
可以简单地写成:
子字段[@code=4]=300