0

私はxmlを持っています

<?xml version="1.0" encoding="UTF-8"?>
<information>
  <person id="1">
  <name>Deep</name>
  <age>34</age>
  <gender>Male</gender>
  </person>

 <person id="2">
  <name>Kumar</name>
  <age>24</age>
  <gender>Male</gender>
  </person>

  <person id="3">
  <name>Deepali</name>
  <age>19</age>
  <gender>Female</gender>
  </person>

  <!-- more persons... -->
</information>
DocumentBuilderFactory domFactory = DocumentBuilderFactory
                .newInstance();
        domFactory.setNamespaceAware(true);
        DocumentBuilder builder = domFactory.newDocumentBuilder();
        Document doc = builder.parse("persons.xml");
        XPath xpath = XPathFactory.newInstance().newXPath();
        // XPath Query for showing all nodes value
        XPathExpression expr = xpath.compile("//information/person[0]/name/text()");

        Object result = expr.evaluate(doc, XPathConstants.NODE);
        Node node = (Node) result;
        System.out.println(node.getNodeValue());

そして、上記のコードを試した最初の人の名前を抽出する必要があります。

更新された例外

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to javax.xml.soap.Node
    at xml.main(xml.java:33)

更新された回答

XPathExpression expr = xpath.compile("//information/person[1]/name");

        String str = (String) expr.evaluate(doc, XPathConstants.STRING);

        System.out.println(str);
4

2 に答える 2

1

XPathExpression expr = xpath.compile( "// information / person [1] / name");

    String str = (String) expr.evaluate(doc, XPathConstants.STRING);

    System.out.println(str);
于 2012-04-12T17:20:39.700 に答える
1

XPath インデックス作成は、ほとんどの人が考えるような 0 ではなく、基数 1 から開始されるため、person[0] は何も返しません。XPath を次のように変更します//information/person[1]/name/text() 。位置を指定して、単純に静的な数値を完全に使用することを避けることもできます。//information/person[position()=1]/name/text()

または//information/person[@id='1']/name/text()IDで必要な場合。

于 2012-04-11T18:12:07.243 に答える