2013-01-17 65 views
1
header = new LinkedHashMap<String,Object>(); 
Element headerElement = (Element)doc.getElementsByTagName("Header").item(0); 
NodeList elementList = headerElement.getElementsByTagName("*"); 
for(int index =0; index < elementList.getLength(); index++){ 
    Node element = elementList.item(index); 
    System.out.println(element.getChildNodes().item(0).getTextContent()); // Statement A   
    System.out.println(element.getTextContent()); // Statement B 

兩個語句A和語句B打印的相同的輸出。XML節點和子節點

這是什麼意思,每一個節點是其自身的子節點?

和輸入XML是

<Header> 
    <tag1>1</tag1> 
    <tag2>2</tag2> 
    <tag3>3</tag3> 
    <tag4>4</tag4> 
</Header> 
+0

顯示輸入XML –

回答

1

getTextContent()返回返回此節點及其後代的文本內容。

語句在tag1返回下方(1

文本節點 在同一個地方執行

聲明B獲得的tag1(具有一個文本節點的列表)的子節點執行時,選擇第一(只)文本節點並顯示其文本值。

在這種情況下,他們是同樣的事情。

+0

紅心!那麼你能告訴我,如何檢查它下面是否沒有標籤。我的意思的東西,不來< > – madhairsilence

+0

之間檢查返回列表中的每個節點的節點類型。查看Javadoc中的'org.w3c.dom.Node'獲取節點類型列表。 –

+0

@madhairsilence:這裏的大圖是什麼?你想達到什麼目的? –

3

documentation of Node.getTextContent(),對於ELEMENT_NODE節點類型:

所述的textContent的級聯屬性每一個孩子節點的值,但不包括COMMENT_NODE和PROCESSING_INSTRUCTION_NODE節點。如果節點沒有子節點,則這是空字符串。

對於文本節點,該方法的返回值只是nodeValue,即節點的文本。

所以是 - 在一個元素上調用這個元素,該元素是一個文本節點的單個子節點會給你與在文本節點上直接調用它相同的結果。但在其他情況下,你會得到不同的結果。例如,如果你有這樣一個元素:

<tag>1<break />2</tag> 

就會有兩個子文本節點和一個子元素節點,其結果將是「1 2」(也可能是「12」;我不知道如何間距工作在這個連接,但你可以檢查)。

這不是「本身包含」一個節點的問題 - 它只是什麼此方法執行定義的問題。

+0

一些解釋,請... – madhairsilence

+0

@madhairsilence:我不知道你的意思。我已經解釋了爲什麼代碼的行爲方式如此:實現遵循文檔。 –