Java XPath查询未在节点中获取文本?
当我运行以下代码时,我得到的是输出Java XPath查询未在节点中获取文本?,java,xml,xpath,Java,Xml,Xpath,当我运行以下代码时,我得到的是输出Left:,而不是Left:16 // Retrieve DOM from XML file DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; Document dom = null; try { db = dbf.newDocumentBuilder(); dom =
Left:
,而不是Left:16
// Retrieve DOM from XML file
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
Document dom = null;
try {
db = dbf.newDocumentBuilder();
dom = db.parse("config");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
try {
String left = (String) xPath.evaluate(
"/settings/boundaries[0]/left[0]", dom,
XPathConstants.STRING);
System.out.println("Left: " + left);
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是XML文件
<settings>
<boundaries>
<left>16</left>
<right>301</right>
<bottom>370</bottom>
<top>171</top>
</boundaries>
</settings>
还请注意,此代码
Element el = (Element) dom.getDocumentElement()
.getElementsByTagName("boundaries").item(0);
System.out.println(el.getElementsByTagName("left").item(0));
打印
[left:null]
您正在使用节点的toString()定义。这是没有记录的,特别是做任何事情。如果您想要节点名,请使用XPathConstants.node并使用节点API,或者如果您想要在求值调用中将值append.text()附加到xpath字符串中。正如我所使用的,您必须在末尾添加/text(),以检索该节点上的数据
/设置/边界[0]/左[0]/text()
节点从1开始索引。试试
/settings/bounders[1]/left[1]
请写更多相关的/重点突出的标题。我的表达会是这样的:“/settings/bounders[0]/left[0]/text()”?这太愚蠢了,但谢谢你。(我还必须将/text()添加到表达式中)。我希望它在所有编程过程中都是一致的(基于零的索引)。看起来这是解决方案的一半。
Element el = (Element) dom.getDocumentElement()
.getElementsByTagName("boundaries").item(0);
System.out.println(el.getElementsByTagName("left").item(0));