这是XML上下文:
<?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>
我正在寻找旅行的CitySeq属性所指示的城市的到来(CitySeq =“ 2”)。所以我需要匹配的是seqno = CitySeq。我期望的结果是
<arrival>2015-04-20T20:35:00</arrival>
。这正在工作:
/travel/cities/city[seqno=2]/arrival
但是替换“ 2”不是:
/travel/cities/city[seqno=/travel/@CitySeq]/arrival
有什么建议吗? (提前致谢)
最佳答案
编辑:我在http://www.freeformatter.com/xpath-tester.html测试了以下表达式
/root/travel/cities/city[seqno=/root/travel/@CitySeq]/arrival
我得到一个结果:
Element='<arrival>2015-04-20T20:35:00</arrival>'
老答案:我不认为XPath支持这样的嵌入式表达式。最好的选择是分两个步骤执行此操作。伪代码如下(假设使用Java):
String citySeq = xPath.compile("/travel/@CitySeq").evaluate(xmlDocument);
String arrival = xPath.compile("/travel/cities/city[seqno=" + citySeq + "]/arrival").evaluate(xmlDocument);
另外,您可能应该测试是否首先找不到citySeq的可能性。
关于xml - XPath比较 child 的值和 parent 的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32009996/