xml - XPath比较 child 的值和 parent 的属性

标签 xml xpath

这是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/

相关文章:

xml - 如何使用自定义策略检查 AD B2C 中是否存在用户?

android - 将 openStream 与具有带下划线的子域的 URL 一起使用会在 Android 中返回 ioexception。为什么?

xml - 如何在我的 xslt 中使用 xpath 从 xml 键/值对中获取值?

xslt - 将连续的后代节点合并为一个

python - 如何抓取这个字段?

selenium - 为 svg 标签创建 XPATH

sql - 使用 Oracle 将 XML 请求插入到 clob 列中

java - Android 具有多个控件的 ListView

xml - Golang Xml Unmarshal,没有值(value)

php - 如何使用 xpath 获取元素?