简体   繁体   English

java xpath返回意外值

[英]java xpath return unexpected values

I'm builind an application which shows a map with the google api. 我正在构建一个显示谷歌api地图的应用程序。 Using the user input address, I query the API for directions to a destination. 使用用户输入地址,我查询API以获取到目的地的路线。 The API returns me a XML response which I parse to build my directions objects and show informations to the user. API返回一个XML响应,我解析它以构建我的方向对象并向用户显示信息。

Everything works but some of my xpath.evaluate() use do not work as I expect. 一切正常,但我的一些xpath.evaluate()使用不起作用。 For example this response : 例如这个回复:

Google Maps Response 谷歌地图响应

When I use : 我用的时候:

NodeList legList = (NodeList) xpath.evaluate("//route/leg",
                    response, XPathConstants.NODE);

Even //leg should do the job right? 甚至//leg应该做对吗?

When I do a legList.getLength(), it gives me 23 but there are only two leg in the response. 当我执行legList.getLength()时,它给了我23但响应中只有两条腿。 Do you know why this strange behavior is happening? 你知道为什么会发生这种奇怪的行为吗? I read about XML Namespace but I still don't know what to do, should I specidfy a namespace even if the answer doesn't contain any, and if yes, why do I have to? 我读过有关XML命名空间的内容,但我仍然不知道该怎么做,即使答案中没有任何内容,我是否应该指定命名空间,如果是,我为什么要这样做?

如果你想要NodeList使用XPathConstants.NODESET而不是XPathConstants.NODE (请点击此处查看映射: http//docs.oracle.com/javase/6/docs/api/javax/xml/xpath/XPathConstants.html#NODESET ) 像这样:

NodeList legList = (NodeList) xpath.evaluate("//route/leg", response, XPathConstants.NODESET);

You need to use 你需要使用

    NodeList legList = (NodeList) xpath.evaluate(expr,
            xml, XPathConstants.NODESET);

try this code. 试试这段代码。

NodeList legList = (NodeList) xpath.evaluate("/route/leg",
                response, XPathConstants.NODESET);

NODESET is return the NodeList while XPathConstants.NODE is return single Object. NODESET返回NodeList,而XPathConstants.NODE返回单个Object。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM