2017-05-14 13 views
0

少し問題があります。Java XML XPath完全なXML

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse("result1.xml"); 
     XPathFactory xPathfactory = XPathFactory.newInstance(); 
     XPath xpath = xPathfactory.newXPath(); 
     XPathExpression expr = xpath.compile("//element"); 
     String elements = (String) expr.evaluate(doc, XPathConstants.STRING); 

は私が何を得る:

 [email protected] 
     Cheryl 
     Blake 
     195115 

は、私が欲しいもの:

<person> 
    <email>[email protected]</email> 
    <firstname>Cheryl</firstname> 
    <lastname>Blake</lastname> 
    <number>195115</number> 
</person> 

ですから、私は完全なXMLツリーを望む見ることができるように私は、次のコードを持っています。 NodeValueだけでなく 多分誰かがこのトリックを知っているかもしれません。 ありがとうございました。

答えて

0

XPathConstants.STRINGXPathExpression.evaluate()を指定したため、選択したXML要素の文字列値が取得されました。

あなたのXPathは、単一の要素を選択することを確実に知っていれば代わりに、あなたがして、必要に応じて処理する反復処理思われる、複数の要素のための

String elements = (String) expr.evaluate(doc, XPathConstants.NODE); 

またはXPathConstants.NODESETXPathConstants.NODEの戻り値の型を指定します。

0

このようなことができます。

XPathExpression expr = xpath.compile("/person"); 
NodeList elements = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 

for (int i = 0; i < elements.getLength(); i++) { 
    // the person node 
    System.out.println(elements.item(i).getNodeName()); 

    for (int x = 0; x < elements.item(i).getChildNodes().getLength(); x++) { 
     // the elements under person 
     if (elements.item(i).getChildNodes().item(x).getNodeType() == Node.ELEMENT_NODE) { 
      System.out.println("\t" + elements.item(i).getChildNodes().item(x).getNodeName() + " - " + elements.item(i).getChildNodes().item(x).getTextContent()); 
     } 
    } 
} 

出力

person 
    email - [email protected] 
    firstname - Cheryl 
    lastname - Blake 
    number - 195115 

は、あなたがやりたいノードを使用するか、またはあなたがちょうどそれらを印刷したい場合は<>でそれらをラップすることができます。

関連する問題