对于下面的xml文件,我想检索对应于lat = 53.0337395的id的值,而在xml中有两个id,其中lat = 53.0337395。如下所示,为了实现这一点,我编写了以下代码,但在运行时我收到了#NUMBER cannt be converted into a nodelist
请让我知道如何解决它
String expr0 = "count(//node[@lat=53.0337395]//@id)";
xPath.compile(expr0);
NodeList nodeList = (NodeList) xPath.compile(expr0).evaluate(document,
XPathConstants.NODESET);
System.out.println(nodeList.getLength());
XML :
<?xml version='1.0' encoding='utf-8' ?>
<osm>
<node id="25779111" lat="53.0334062" lon="8.8461545"/>
<node id="25779112" lat="53.0338904" lon="8.846314"/>
<node id="25779119" lat="53.0337395" lon="8.8489255"/>
<tag k="maxspeed" v="30"/>
<tag k="maxspeed:zone" v="yes"/>
<node id="25779111" lat="53x.0334062" lon="8x.8461545"/>
<node id="25779112" lat="53x.0338904" lon="8x.846314"/>
<node id="257791191" lat="53.0337395" lon="8x.8489255"/>
<tag k="maxspeed" v="30x"/>
<tag k="maxspeed:zone" v="yes"/>
</osm>
答案 0 :(得分:1)
如果您想获取节点列表(count()
将返回一个数字,而不是列表),我不确定您使用count()
的原因。试试这个:
String expr0 = "/osm/node[@lat=53.0337395]/@id";
NodeList nodeList = (NodeList) xPath.compile(expr0).evaluate(document,
XPathConstants.NODESET);
System.out.println(nodeList.getLength());
以下是使用XML文件作为输入的完整可编译示例:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class IdFinder
{
public static void main(String[] args)
throws Exception
{
File fXmlFile = new File("C:/Users/user2121/osm.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document document = dBuilder.parse(fXmlFile);
XPath xPath = XPathFactory.newInstance().newXPath();
String expr0 = "/osm/node[@lat=53.0337395]/@id";
NodeList nodeList = (NodeList) xPath.compile(expr0).evaluate(document, XPathConstants.NODESET);
System.out.println("Matches: " + nodeList.getLength());
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getNodeValue());
}
}
}
这个输出是:
Matches: 2 25779119 257791191