2011-01-13 57 views
16

我有以下代碼:問題設置在Java中,DOM,XML解析一個新的節點值

DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder(); 
StringReader reader = new StringReader(s); 
InputSource inputSource = new InputSource(reader); 
Document doc_ = dBuilder.parse(inputSource); 

,然後我想正確的使用此代碼根節點下創建該節點的新元素:

Node node = doc_.createElement("New_Node"); 
node.setNodeValue("New_Node_value"); 
doc_.getDocumentElement().appendChild(node); 

問題是節點被創建並追加,但未設置該值。我不知道當我看着我的xml,如果它以某種方式隱藏的時候,我看不到它的價值,但我不認爲是這種情況,因爲我試圖在create node調用之後獲取節點值並返回null。 我是新來的XML和DOM,我不知道新節點的價值存儲在哪裏。它是否像一個屬性?

<New_Node value="New_Node_value" /> 

或者它把價值在這裏:

<New_Node> New_Node_value </New_Node> 

任何幫助將不勝感激,

謝謝,喬希

+0

你寫新的DOM背到一個文件?我沒有看到任何關於編寫的參考,並且您指的是查看xml。 – 2011-01-13 15:11:05

+0

@ RD01 - 是的,我把它寫回到一個文件。我想現在我的主要問題是如果node.setNodeValue()沒有設置文本或屬性,它會做什麼? – Grammin 2011-01-13 15:26:29

回答

35

下面的代碼:

Element node = doc_.createElement("New_Node"); 
node.setTextContent("This is the content"); //adds content 
node.setAttribute("attrib", "attrib_value"); //adds an attribute 

生產:

<New_Node attrib="attrib_value">This is the content</New_Node> 

希望這澄清。

0
<New_Node value="New_Node_value" /> 

'價值' 是

屬性

New_Node

元素,進入DOM我建議你http://www.w3schools.com/htmldom/default.asp

+0

我知道在那個實例中value是一個屬性,但我不知道什麼時候setNodeValue是什麼值,爲什麼我嘗試的代碼不工作。 – Grammin 2011-01-13 14:26:03

1

爲了澄清,當你創建節點使用:

Attr x = doc.createAttribute(...); 
Comment x = doc.createComment(...); 
Element x = doc.createElement(...); // as @dogbane pointed out 
Text x = doc.createTextNode(...); 

而是採用了通用的節點你所得到的每個方法回來。它會讓你的代碼更容易閱讀/調試。

其次,getNodeValue()/setNodeValue()方法的工作方式取決於您擁有的節點類型。請參閱Node class的摘要以供參考。對於元素,不能使用這些方法,儘管對於文本節點可以。

正如@dogbane指出的那樣,使用setTextContent()作爲此元素標籤之間的文本。請注意,這會破壞所有現有的子元素。

0

這是另一種解決方案,在我的情況下,這個解決方案正在工作,因爲setTextContent()函數不存在。我正在使用Google Web Toolkit(GWT)(它是一個開發框架Java),並且我導入了XMLParser庫,以便可以使用DOM Parser。

import com.google.gwt.xml.client。XMLParser的;

Document doc = XMLParser.createDocument();

Element node = doc.createElement(「New_Node」); node.appendChild(doc.createTextNode(「value」));

doc.appendChild(node);

結果是:

< New_Node>值< /New_Node>