分层列/名称-值属性的 XPath?



我正在尝试查找以下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属性。

对于一行代码来说,这是很多错误。

其他人给了你可行的解决方案,但我认为重要的是你明白为什么你的尝试是错误的。

最新更新