2011-01-13 13 views
16

avere il codice seguente:Problemi impostazione di un nuovo valore del nodo in Java, dom, XML parsing

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

e quindi desidero creare un nuovo elemento in quel nodo proprio sotto il nodo radice con questo codice :

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

Il problema è che il nodo viene creato e aggiunto ma il valore non è impostato. Non so se non riesco a vedere il valore quando guardo il mio xml se è nascosto in qualche modo ma non penso che sia il caso perché ho cercato di ottenere il valore del nodo dopo la chiamata al nodo di creazione e restituisce null. Sono nuovo di xml e dom e non so dove viene memorizzato il valore del nuovo nodo. È come un attributo?

<New_Node value="New_Node_value" /> 

o fa mettere valore qui:

<New_Node> New_Node_value </New_Node> 

Qualsiasi aiuto sarebbe molto apprezzato,

Grazie, Josh

+0

Stai scrivendo il nuovo DOM di nuovo fuori in un file? Non vedo alcun riferimento alla scrittura e ti riferisci a guardare l'xml. –

+0

@ RD01 - Sì, lo sto scrivendo su un file. Immagino che la mia domanda principale a questo punto sia cosa fa node.setNodeValue() se non imposta il testo o l'attributo? – Grammin

risposta

35

Il seguente codice:

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

produce:

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

Spero che questo chiarisce.

+0

Ah che chiarisce, quindi cosa fa node.setNodeValue()? – Grammin

+7

'setNodeValue' varia in base al tipo di nodo (dai un'occhiata alla tabella in javadocs: http://download.oracle.com/javase/6/docs/api/org/w3c/dom/Node.html). Se il nodo è un 'Elemento', l'impostazione di nodeValue non fa nulla, perché nodeValue è' null'. – dogbane

+0

Grazie per il chiarimento! – Grammin

0
<New_Node value="New_Node_value" /> 

'valore' è un attributo di

New_Node

elemento, per entrare in DOM vi suggerisco di http://www.w3schools.com/htmldom/default.asp

+0

So che in quell'istanza il valore è un attributo, ma non so quale sia il valore quando imposto SetNodeValue e perché il codice che sto provando non funziona. – Grammin

1

Per chiarimenti, quando si creano i nodi usare:

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

invece di utilizzare il nodo generico per quello che si ottiene indietro da ogni metodo. Rende il tuo codice più facile da leggere/eseguire il debug.

In secondo luogo, i metodi getNodeValue()/setNodeValue() funzionano in modo diverso a seconda del tipo di nodo in uso. Vedere il riassunto di Node class come riferimento. Per un elemento, non è possibile utilizzare questi metodi, anche se per un nodo di testo è possibile.

Come indicato da @dogbane, utilizzare setTextContent() per il testo tra i tag di questo elemento. Nota che questo distruggerà qualsiasi elemento figlio esistente.

0

Questa è un'altra soluzione, nel mio caso questa soluzione funziona perché la funzione setTextContent() non esiste. Sto lavorando con Google Web Toolkit (GWT) (È un framework di sviluppo Java) e sto importando la libreria XMLParser per poter usare DOM Parser.

importazione com.google.gwt.xml.client.XMLParser;

Documento doc = XMLParser.createDocument();

Elemento nodo = doc.createElement ("New_Node"); node.appendChild (doc.createTextNode ("valore"));

doc.appendChild (nodo);

Il risultato è:

< New_Node> valore < /New_Node>