我正在尝试查找以下XML的XPath。 它由属性数组列表组成。我需要获取"计算机"的值。
<output xmlns:tns="http://www.ariuy.org/" custname="marcus" >
<tns:column name="customer_english_name">marcus ag</tns:column>
<tns:column name="customer_primary_name">marcus ag</tns:column>
<tns:reqline>
<tns:orderline user_item_description="xyz">
<tns:column name="properties">
<tns:column name="name">COMPUTER</tns:column>
<tns:column name="value">HCL </tns:column>
</tns:column>
<tns:column name="properties">
<tns:column name="name">LAPTOP</tns:column>
<tns:column name="value">HP</tns:column>
</tns:column>
<tns:column name="properties">
<tns:column name="name">PHONE</tns:column>
<tns:column name="value">MI</tns:column>
</tns:column>
<tns:column name="properties">
<tns:column name="name">JOB</tns:column>
<tns:column name="value">Developer</tns:column>
</tns:column>
......
</tns:orderline>
</tns:reqline>
</output>
我试过了
/tns:output/tns:reqline/tns:OrderLine/tns:properties[@name='COMPUTER']/@value
但它不起作用。
要HCL
(值低于COMPUTER
(,您可以使用:
(//*[name()="tns:column"][@name="properties"])[1]/*[2]/text()
查找具有页面特定属性的第一个列元素。然后选择其第二个子项。
或更安全的选项:
//*[name()="tns:column"][preceding-sibling::*[name()="tns:column"][.="COMPUTER"]]/text()
在任何地方查找其前同级包含值"COMPUTER"的列元素。
假设您tns
正确声明命名空间前缀以缩写http://www.ariuy.org/
命名空间值...
这个XPath,
/output/tns:reqline/tns:orderline
/tns:column[@name='properties'][tns:column[@name='name']='COMPUTER']
/tns:column[@name='value']
将选择
<tns:column name="value">HCL </tns:column>
根据要求。
你说:
/tns:output/tns:reqline/tns:OrderLine/tns:properties[@name='COMPUTER']/@value
井
(a(output
元素不在 TNS 命名空间中
(b(orderline
要素以o
开头,而不是O
(c( 您没有名为tns:properties
的元素
(d( 没有值为"COMPUTER"
的@name
属性
(e( 任何地方都没有@value
属性。
对于一行代码来说,这是很多错误。
其他人给了你可行的解决方案,但我认为重要的是你明白为什么你的尝试是错误的。