2012-01-19 100 views
4

我有一個XML文件,如下所示。DOM getElementsByTagName()用NULL值返回節點

當我使用getElementsByTagName("LEVEL2_ID"),我得到一個NodeListNodes,但這些節點有NULL值(換句話說,getNodeValue()每個結果節點將返回NULL)。爲什麼是這樣?我需要獲取每個節點的內容值,在這種情況下爲2000

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Root> 
    <Date>01/17/2012</Date> 
    <LEVEL1> 
     <LEVEL1_ID>1000</LEVEL1_ID> 

     <LEVEL2> 
      <LEVEL2_ID>2000</LEVEL2_ID> 
     </LEVEL2> 
    </LEVEL1> 
</Root> 

在Java中,打印第一節點的價值的getElementsByTagName()返回NULL獲得:

NodeList nodes = document.getElementsByTagName("LEVEL2_ID"); 

System.out.println("Value of 1st node: " + nodes.item(0).getNodeValue()); 

回答

7

That is defined in the specification。元素節點'nodeValuenull

DOMString類型的nodeValue:取決於其類型的該節點的值;見上表。當它被定義爲空時,設置它不起作用。

如果你想獲得每個節點的文本內容,你必須遍歷所有的文本節點後代並連接它們的值。

也就是說,您正在使用的API實現可能會提供一種方法來直接檢索元素的文本內容。例如,PHP的DOMNode有一個$textContent屬性。

如果,在你的情況下,該元素的唯一的孩子其實是你想要的文本節點,你可以簡單地訪問它的價值:

element.getFirstChild().getNodeValue() 
+0

謝謝。 getFirstChild()工作。 –

2

如果你有一個元素節點,並希望得到它的內部文本,使用getTextContent()這樣的:

NodeList nodes = document.getElementsByTagName("LEVEL2_ID"); 
System.out.println("Value of 1st node: " + nodes.item(0).getTextContent()); 
+0

沒有這樣的方法存在我:getTextContent() –

+0

好吧,我假設你使用的是Java SE 6.文檔在這裏:http://docs.oracle.com/javase/6/docs/api/org/w3c/ DOM/Node.html#getTextContent() –