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));