Xml XPath比较子对象';带父项的s值';s属性
这是XML上下文:Xml XPath比较子对象';带父项的s值';s属性,xml,xpath,Xml,Xpath,这是XML上下文: <?xml version="1.0" encoding="utf-8"?> <root> <travel Selectedcity="USPDX" CitySeq="2"> <travelcode>01</travelcode> <cities> <city> <seqno>3</seqno> <
<?xml version="1.0" encoding="utf-8"?>
<root>
<travel Selectedcity="USPDX" CitySeq="2">
<travelcode>01</travelcode>
<cities>
<city>
<seqno>3</seqno>
<city_code>USPDX</city_code>
<arrival>2015-04-23T14:37:00.143</arrival>
</city>
<city>
<seqno>1</seqno>
<city_code>JPHIC</city_code>
<arrival>2015-05-09T06:26:00</arrival>
</city>
<city>
<seqno>2</seqno>
<additional_code>11222</additional_code>
<city_code>USPDX</city_code>
<arrival>2015-04-20T20:35:00</arrival>
</city>
</cities>
</travel>
</root>
01
3.
USPDX
2015-04-23T14:37:00.143
1.
JPHIC
2015-05-09T06:26:00
2.
11222
USPDX
2015-04-20T20:35:00
我正在寻找旅行的CitySeq属性(CitySeq=“2”)所指示的城市的到达。所以我需要匹配的是seqno=CitySeq。我期望的结果是2015-04-20T20:35:00
这是有效的:/travel/cities/city[seqno=2]/arrival
但替换“2”不是:/travel/cities/city[seqno=/travel/@CitySeq]/arrival
建议?(提前感谢)编辑:我在 我得到了一个结果:
Element='<arrival>2015-04-20T20:35:00</arrival>'
此外,您可能还应该测试一开始没有找到citySeq的可能性。另一种选择是使用
祖先
轴到达相应的旅行
祖先元素
/root/travel/cities/city[seqno=ancestor::travel/@CitySeq]/arrival
这将有助于特别是在
根目录中有多个旅行元素的情况下,顺便说一句,我正在使用此站点测试它:。例如:XPATH(/travel/cities/city[seqno=3]/arrival)如果可能有多个travel
元素,那么它是不正确的,因为如果存在一个travel
元素,该元素具有值为seqno
的CitySeq
属性,则谓词为true。最好使用祖先
,因为其他答案使用它
String citySeq = xPath.compile("/travel/@CitySeq").evaluate(xmlDocument);
String arrival = xPath.compile("/travel/cities/city[seqno=" + citySeq + "]/arrival").evaluate(xmlDocument);
/root/travel/cities/city[seqno=ancestor::travel/@CitySeq]/arrival