At 14.27 01/03/01 +0100, you wrote:
Hi

I know how to parse a xml-document into a DOM-tree, and traverse this tree.
Now I have 2 questions

1) I wanna fill out the empty tags i might have fx.

<root>
  <tag1></tag1>
</root>

should be:

<root>
  <tag1>Some new text here</tag1>
</root>

2) I wanna add childelements to my excisting elements fx.

<root>
  <tag1></tag1>
</root>

becomes:

<root>
  <tag1>
    </tag2>
    </tag3>
  </tag1>
</root>

I wanna do this in the DOM-tree, because I have to do it several times,
when my tree is done, I can return the tree (as a xml-document) with all the
data and new tags...

I can help you with this method that merges 2 dom objects, the first is * <?xml version="1.0"?> * <ROWSET> * <ROW> <TEMP> </TEMP> * </ROW> * </ROWSET>

the second is
<ROWSET>
   <ROW num=�1�>
     <NOME>Leo</NOME>
     <COGNOME>Batta</COGNOME>
     <TEL>347123</TEL>
   </ROW>
</ROWSET>


if you execute the methos in this way BeanDom.CostruisciDOM(dom1, dom2, �ROWSET�, �DATI�);

you'll have back an xmldocument like this one
<?xml version="1.0"?>
<ROWSET>
   <ROW num=�1�>
     <TEMP>Leo</TEMP>
   </ROW>
   <DATI>
     <NOME>Max</NOME>
     <COGNOME>Conte</COGNOME>
     <TEL>123347</TEL>
   </DATI>
</ROWSET>


Hope it helps in some way

Leonardo

/**
* Dati 2 oggetti DOM aggiunge al nodo ROWSET uno o piu' nodi definiti dal
* tag NEWNODO
* N: Restituisce un oggetto DOM di quewcsto tipo
* <?xml version="1.0"?>
* <ROWSET>
* <ROW>
* </ROW>
* <ROW>
* </ROW>
* <ROW>
* </ROW>
* <DATA>
* </DATA>
* <AREAGEO>
* </AREAGEO>
* <VIATERRA>
* </VIATERRA>
* <VIAMARE>
* </VIAMARE>
* </ROWSET>
*/
public XMLDocument CostruisciDOM(XMLDocument dompadre, XMLDocument domfiglio, String nodopadre, String nodofiglio)
{
//Prendo la lista dei figli del DOMPADRE
NodeList listafiglipadre = dompadre.getChildNodes();
//MI memorizzo il nodo zero per aggiungervi un nodo 'ROWLIST'
Node nodo = listafiglipadre.item(0);
if (nodo == null) System.out.println("NODO BASE E' NULL");
//Mi creo un 'nodobase' di tipo NODE
Node nodobase = nodo.getOwnerDocument().getDocumentElement();
//Mi creo un 'rootbase' di tipo DOCUMENT
Document rootbase = nodo.getOwnerDocument();
//entro nel primo nodo (che � la ROOT='ROWSET')
nodo = listafiglipadre.item(1);
//mi memorizzo il nodo rowset dove dovr� appendere le ROWS del dom2
//questo nodo viene utilizzato per l'inserimento ed il merge con altri dom
Node aggiungerequi = nodo.getOwnerDocument().getDocumentElement();


//Prendo la lista dei figli del DOMFIGLIO
NodeList listafiglifiglio = domfiglio.getChildNodes();
//entro nel primo nodo (che � la ROOT='ROWSET')
nodo = listafiglifiglio.item(1);
//Prendo la lista dei figli di 'ROWSET' cio� una sfilza di 'ROWS'
NodeList listarowsfiglio = nodo.getChildNodes();
//Creo un elemento 'VIAMARE'
//Element viamare = (Element)rootbase.createElement("VIAMARE");
Element nomenewnodo = (Element)rootbase.createElement(nodofiglio.toString());
//lo aggiungo alla root del DOM1
nodobase.appendChild(nomenewnodo);


//Ciclo fintanto ci sono ROWS nel DOMFIGLIO
//Per ogni ROWS devo creare un nuovo nodo all'interno del NODOFIGLIO
//Es:
// <VIAMARE>
// <OPERATORE num="1">
// <NOME>Leo</NOME>
// <COGNOME>Batta</COGNOME>
// <TELEFONO>0347</TELEFONO>
// </OPERATORE>
// <NOME>Leo</NOME>
// <COGNOME>Batta</COGNOME>
// <TELEFONO>0347</TELEFONO>
// <OPERATORE num="2">
// </OPERATORE>
// <OPERATORE num="3">
// <NOME>Leo</NOME>
// <COGNOME>Batta</COGNOME>
// <TELEFONO>0347</TELEFONO>
// </OPERATORE>
// </VIAMARE>
for (int i = 0; i < listarowsfiglio.getLength(); i++)
{
//Mi posizione sull'elemento i
nodo = listarowsfiglio.item(i);
//System.out.println("BeanDOM-QUANTI CAMPI PER OGNI ROWS???"+nodo.getChildNodes().getLength());


//Creo un elemento 'ROW'
Element nomenodo = (Element)rootbase.createElement("ROW");
//lo aggiungo al NODO appena creato, cio� NODOFIGLIO
nomenewnodo.appendChild(nomenodo);
//adesso gli setto l'attributo per poi poter effetturare un ciclo 'FOR-EACH' dal file XSL
Integer k = new Integer(i+1);
nomenewnodo.setAttribute("num",k.toString());


            NodeList datiinterni = nodo.getChildNodes();
            for (int j = 0; j < datiinterni.getLength(); j++)
            {
              //Mi posizione sul primo parametro, ad esempio NOME
              nodo = datiinterni.item(j);
              //recupero il nome di tale nodo, es nomenodo = 'NOME'
              String nomenodoint = nodo.getNodeName();
              //Per recuperare il valore devo posizionarmi sul primo figlio
              Node testo = nodo.getFirstChild();
              String testovero = testo.getNodeValue();
              String valorenodo = testovero;

              //Creo un elemento 'nomenodoint', cio� NOME
              Element dato = (Element)rootbase.createElement(nomenodoint);
              //lo aggiungo al nodo ROW, cio� dentro al tag ROW
              nomenodo.appendChild(dato);
              //gli assegno 'valorenodo'
              dato.appendChild( rootbase.createTextNode(valorenodo) );
            }
        }
        //ATTENZIONEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
        return dompadre;
    }



I have searched the net, but I can only find examples of how to traverse the
tree, but not a single example of how to add a new branch to my DOM-tree

Any help / hint would be appriciated.
If you have an example I would be very glad.

       _\|/_
       (@ @)
---oOOo-(_)-oOOo---
    Ren� Jensen
 [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

============================================== Lulli Informatica S.r.l. http://www.lulliinformatica.com ---------------------------------------------- Leonardo Battagli: Java/XML Developer at [EMAIL PROTECTED] ============================================== Out of the office email address: [EMAIL PROTECTED] ==============================================



Reply via email to