2017-09-14 27 views
0

XMLノードから値を取り出し、CDATAセクションの問題で実行しようとしています。このコードでノードがCDATAセクションかどうかを確認

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<root> 
    <Test>This is my node</Test> 
    <HelpContent><![CDATA[this is the CDATA section]]></HelpContent> 
</root> 

私のXMLは次のようになり

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();  
Document doc = dBuilder.parse(currentFile); 

XPathFactory xPathFactory = XPathFactory.newInstance(); 
XPath xpathObj = xPathFactory.newXPath(); 
XPathExpression expr = xpathObj.compile("//*"); 

NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);  
int len = nodes.getLength(); 
for (int i = 0; i < len; i++){ 
    Node node = nodes.item(i); 
    System.out.println("Node name [" + node.getNodeName() + "] of type [" + node.getNodeType() + "]"); 
    System.out.println("NodeValue: " + node.getNodeValue()); 
    System.out.println("TextContent: " + node.getTextContent()); 
} 

私は次のように得た:

> Node name [root] of type [1] 
> NodeValue: null 
> TextContent:  This is my 
> node this is the CDATA section 
> 
> Node name [Test] of type [1] 
> NodeValue: null 
> TextContent: This is my node 
> 
> Node name [HelpContent] of type [1] 
> NodeValue: null 
> TextContent: this is the CDATA section 

あなたが子を持つノードのために、見ることができるように(この場合はルートのみです)子ノードからすべてのテキストを抽出しました。 さらに、getNodeTypeは常に1(ELEMENT_NODE)に戻ります。

質問「Test」や「TextContent」のようなデータが含まれていてもノードの値が空であるかnullの場合のみノードの値を取得できますか"ルート"?

ありがとうございます。

+0

可能な重複? ](https://stackoverflow.com/questions/568315/how-do-i-retrieve-element-text-inside-cdata-markup-via-xpath) –

+0

リンクされた複製は、XPathが 'CDATA'ノードを無視することを説明しています。 XPathを使用する代わりにDOMを歩くと、それらを見つけることができるはずです。 –

+0

要素nodeの 'node.getNodeValue()'はnullです。 https://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D080。最小限の完全なサンプルを表示して、得た結果を再現できるようにして、代わりに期待する結果の説明と一緒に表示することもできます。 –

答えて

0

私はこの解決策を出します...それが正しい方法であるかどうかは分かりませんが、期待通りに動作するようです。

ので、「テスト」または「HelpContent」のようなノードの値を取得するために、私は次のようにコードを更新:[どのように私は、XPathを経由してCDATAマークアップ内の要素のテキストを取得んの

NodeList childs = node.getChildNodes(); 

if (childs.getLength() == 1){ 
    System.out.println("TextContent: " + node.getTextContent()); 
} 
関連する問題