java - 如何在 Java 中使用 xpath 从特定属性中选择所有属性值

标签 java xml xpath

我有以下包含 GPS 坐标的 XML 文件,我只是想知道如何使用 Java 中的 Xpath 提取轨迹纬度和经度。到目前为止我尝试过:

System.out.println(xpath.evaluate("/gpx/trk/trkseg/trkpt/@lat", doc));

但这只检索第一个值?请有人告诉我如何一次性检索所有值。

提前非常感谢。

<gpx xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="MapSource 6.11.3"
version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1
http://www.topografix.com/GPX/1/1/gpx.xsd">
<metadata>...</metadata>
<wpt lat="40.653792" lon="-111.922379">...</wpt>
<wpt lat="40.658111" lon="-111.919564">...</wpt>
<wpt lat="40.659546" lon="-111.917527">...</wpt>
<wpt lat="40.595857" lon="-111.910294">...</wpt>
<wpt lat="40.657349" lon="-111.918721">...</wpt>
<trk>
<name>FromParking</name>
<extensions>...</extensions>
<trkseg>
<trkpt lat="40.653782" lon="-111.922365">
    <ele>1224.376221</ele>
    <time>2009-11-19T20:00:11Z</time>
</trkpt>
<trkpt lat="40.653786" lon="-111.922350">
    <ele>1223.895508</ele>
    <time>2009-11-19T20:00:13Z</time>
</trkpt>
<trkpt lat="40.654449" lon="-111.922073">
    <ele>1224.376221</ele>
    <time>2009-11-19T20:00:22Z</time>
</trkpt>
<trkpt lat="40.654509" lon="-111.921919">
    <ele>1224.376221</ele>
    <time>2009-11-19T20:00:25Z</time>
</trkpt>
<trkpt lat="40.654618" lon="-111.921700">
    <ele>1224.856934</ele>
    <time>2009-11-19T20:00:35Z</time>
</trkpt>

最佳答案

除了我在 my answer to your previous question 中描述的命名空间问题之外,这里的根本问题是 XPath.evaluate 方法没有QName returnType 参数会将 XPath 表达式计算为字符串/em>,XPath 规则规定包含多个节点的节点集的字符串值为 defined to be按文档顺序排列的集合中第一个节点的字符串值。

如果要计算返回一组节点的 XPath 表达式,则必须使用采用 QName 的 XPath 方法之一,传递 XPathConstants.NODESET 作为请求的返回类型,然后强制转换结果从 evaluate 返回到 org.w3c.dom.NodeList,然后您可以对其进行迭代。

关于java - 如何在 Java 中使用 xpath 从特定属性中选择所有属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197722/

相关文章:

Hibernate示例程序中的java.lang.NullPointerException

xml - 错误 : Prefix must resolve to a namespace

Java XPath(Apache JAXP 实现)性能

css - 空链接元素上的 XPath 错误

javascript - 是否可以使用 XPath 获取此结果集?

Java HashMap 和 ArrayList 速度对比

java - 这会被认为是糟糕的 RESTFul 设计吗?

java - Ant: ":"和 ";"作为分隔符未在类路径中正确读取

xml - 加载 xml 文件并读取标签 Windows 应用商店应用程序 C#

java - 如何检查端点是否用于 munit 测试