2009-03-16 5 views
4

次のコードを使用して、ストリームから取得するXPathでXMLをクエリしています。XPathを使用してXMLをクエリするときに常にnullが返される

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
domFactory.setNamespaceAware(false); 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
Document doc = builder.parse(inputStream); 
inputStream.close(); 

XPathFactory factory = XPathFactory.newInstance(); 
XPath xpath = factory.newXPath(); 
XPathExpression expr = xpath.compile("//FOO_ELEMENT"); 

Object result = expr.evaluate(doc, XPathConstants.NODESET); 
NodeList nodes = (NodeList) result; 
for (int i = 0; i < nodes.getLength(); i++) { 
    System.out.println(nodes.item(i).getNodeValue()); 

私は、文字列に変換することにより、コンテンツのストリームをチェックしている - そしてそれはすべてあります - ストリームにデータが存在しないかのようにそれはないですので。

さまざまなコードを試してみましたが、 "System.out.println"行に "null"が表示されているので、ここでは何が分かりませんか?

注:要素内のテキストを見たいと思っています。

+0

を参照してください。 "null"を出力するか、NullPointerExceptionを受け取るか? – Eddie

+0

これは今編集されています - 仲間Eddie。 – Vidar

答えて

7

はあなたのSystem.out.println(nodes.item(I).getNodeValue())ことを意味するかhttp://java.sun.com/javase/6/docs/api/org/w3c/dom/Node.html

+0

あなたのコード例がうまくいきます!それは私には間違ってノードを照会していたことはありませんでした - ごめんな間違いのビット - Eddieを歓迎します。 – Vidar

+0

getTextContent()に注意してください - あなたが選択したノードのテキストコンテンツと子ノードも返します。あなたがしたいことではないかもしれません。 – Brabster

4

Java XPath impl tbhの専門家ではありませんが、これが役立つ可能性があります。

javadocsは、getNodeValue()の結果は、ほとんどのタイプのノードではnullになると言います。

出力に表示される内容は完全にはっきりしません。要素名、属性、テキスト?私はテキストを推測します。私が使用しているすべてののXPath IMPLでは、あなたはノードのテキストコンテンツをしたい場合、あなたは、XPathに

//FOO_ELEMENT/text() 

に持ってその後、ノードの値は、ノードのテキストコンテンツです。

getTextContent()メソッドは、XPathで選択したノードのテキストコンテンツと任意の子孫ノードをjavadocごとに返します。上記のソリューションは、ドキュメント内の任意のノードFOO_ELEMENTのテキストコンポーネントを厳密に選択します。

Java EE Docs for Node < - 古いドキュメント、現在のドキュメントのコメントをご覧ください。 Brabsterはあなたが表示しようとしているものに応じて

System.out.println(nodes.item(i).getTextContent()); 

または

System.out.println(nodes.item(i).getNodeName()); 

を試してみたいことがあり、提案するものに加えて

+0

これはそれでなければなりません。また、JDK 6 JavaDocのhttp://java.sun.com/javase/6/docs/api/org/w3c/dom/Node.htmlも参照してください。 – Eddie

+0

ええ、ごめんなさい。 – Brabster

+0

実際には動作しません。 – Vidar

関連する問題