Xml XPath比较子对象';带父项的s值';s属性

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上下文:

<?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