3

次のコードを実行すると、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>

編集:答えに基づいて、これは機能するはずですが、機能しません:

// 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]/text()", dom,
                XPathConstants.STRING);
        System.out.println("Left: " + left);
    } catch (XPathExpressionException e) {
        e.printStackTrace();
    }

また、このコード、

Element el = (Element) dom.getDocumentElement()
            .getElementsByTagName("boundaries").item(0);

System.out.println(el.getElementsByTagName("left").item(0));

版画[left: null]

4

3 に答える 3

4

ノードのインデックスは 1 から始まります。/settings/boundaries[1]/left[1]

于 2012-05-04T23:14:15.830 に答える
2

ノードのtoString()定義を使用しています。それは特に何かをするために文書化されていません。ノード名が必要な場合は、XPathConstants.NODEを使用してノードAPIを使用します。値が必要な場合は、evaluate呼び出しでxpath文字列に.text()を追加します。

于 2012-05-04T21:06:03.093 に答える
2

私が使用したように、そのノードのデータを取得するには、最後に /text() を追加する必要があります

/設定/境界[0]/左[0]/テキスト()

于 2012-05-04T22:39:36.487 に答える