【发布时间】:2012-03-13 13:32:58
【问题描述】:
我正在构建一个使用 google api 显示地图的应用程序。使用用户输入的地址,我查询 API 以获取到目的地的路线。 API 返回一个 XML 响应,我对其进行解析以构建路线对象并向用户显示信息。
一切正常,但我的一些 xpath.evaluate() 使用没有按我的预期工作。例如这个响应:
当我使用时:
NodeList legList = (NodeList) xpath.evaluate("//route/leg",
response, XPathConstants.NODE);
即使//leg也应该做正确的工作吗?
当我执行 legList.getLength() 时,它给了我 23,但响应中只有两条腿。你知道为什么会发生这种奇怪的行为吗?我读到了XML Namespace,但我仍然不知道该怎么做,即使答案不包含任何命名空间,我是否应该指定一个命名空间,如果是,我为什么要这样做?
【问题讨论】:
-
对于给定的响应
//leg和//route/leg是等价的。它们不一定在所有可能的响应中都相同。你试过/route/leg吗?legList中的节点是什么? -
在我的 JVM (Sun JDK1.6.0_14) 上,请求 XPathConstants.NODE,返回类型:com.sun.org.apache.xerces.internal.dom.DeferredElementImpl - 它也实现了 NodeList 接口。所以我相信它将长度报告为它在 Xml 中找到的第一个
元素的子节点数。