我在xml以下,想要阅读'价值'名称与' test2'匹配的标记。我使用下面的xpath,但没有用。有人可以帮忙。
/*[ local-name()='OutputData']/*[ local-name()='OutputDataItem']/*[ local-name()='Name'][normalize-space(.) = 'test2']//*[local-name()='Value']/text()
<get:OutputData>
<get:OutputDataItem>
<get:Name>test1</get:Name>
<get:Value/>
</get:OutputDataItem>
<get:OutputDataItem>
<get:Name>test2</get:Name>
<get:Value>B5B4</get:Value>
</get:OutputDataItem>
<get:OutputDataItem>
<get:Name>test3</get:Name>
<get:Value/>
</get:OutputDataItem>
<get:OutputDataItem>
<get:Name>OP_VCscEncrptCd_VAR</get:Name>
<get:Value/>
</get:OutputDataItem>
</get:OutputData>
由于
答案 0 :(得分:2)
我认为这应该有效:
//*[local-name()="get:Name" and text()="test2"]/following-sibling::*[local-name()="get:Value"]/text()
答案 1 :(得分:2)
你很亲密,但由于get:name
和get:value
是兄弟姐妹,你需要稍微调整你的XPath。
您的XPath试图解决get:value
后代的get:name
元素,而不是兄弟姐妹。将过滤get:name
的条件移动到谓词中,然后逐步进入get:value
:
/*[ local-name()='OutputData']/*[ local-name()='OutputDataItem']
[*[ local-name()='Name'][normalize-space(.) = 'test2']]/*[local-name()='Value']/text()
您还可以在get:name
上合并谓词过滤条件并使用and
:
/*[ local-name()='OutputData']/*[ local-name()='OutputDataItem']
[*[ local-name()='Name' and normalize-space(.) = 'test2']]/*[local-name()='Value']/text()