Originariamente inviato da koala81
A me interessava sapere anche un parere sull'uso dei due metodi parse().
Cioè, come potevo usarli per scorrere tutto l'albero.

Pensavo a qualcosa di ricorsivo, ma non capisco come posso usare tutti e due i metodi...
Prima devi capire cosa contiene l'albero dei nodi:

codice:
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class BasicJaxpDom2
{
    public static void main (String[] args)
    {
        try
        {
            File f = new File ("documento.xml");

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
            DocumentBuilder builder = factory.newDocumentBuilder ();
            Document document = builder.parse (f);

            Element root = document.getDocumentElement ();
            
            elabora (root, 0);
        }
        catch (Exception e)
        {
            System.out.println (e);
        }
    }
    
    public static void elabora (Node node, int livello)
    {
        indentazione (livello);
        System.out.println ("Nome = " + node.getNodeName ());

        short type = node.getNodeType ();

        indentazione (livello);
        System.out.print ("Tipo = " + type);

        switch (type)
        {
            case Node.ELEMENT_NODE:
                System.out.println ("  ELEMENT");
                break;
            case Node.TEXT_NODE:
                System.out.println ("  TEXT: \"" + node.getNodeValue() + "\"");
                break;
            // ... esistono molti altri tipi ....
            default:
                System.out.println ();
                break;
        }
        
        System.out.println ();

        NodeList nodeList = node.getChildNodes ();

        for (int i = 0; i < nodeList.getLength(); i++)
            elabora (nodeList.item (i), livello+1);  // chiamata ricorsiva!
    }

    public static void indentazione (int livello)
    {
        for (int i = 0; i < livello; i++)
            System.out.print ("   ");
    }
}
Dato un documento di questo tipo:

codice:
<?xml version="1.0"?>
<prova>
  <esempio>
    <messaggio>ciao</messaggio>
  </esempio>
</prova>
L'output del programma è:

codice:
Nome = prova
Tipo = 1  ELEMENT

   Nome = #text
   Tipo = 3  TEXT: "
  "

   Nome = esempio
   Tipo = 1  ELEMENT

      Nome = #text
      Tipo = 3  TEXT: "
    "

      Nome = messaggio
      Tipo = 1  ELEMENT

         Nome = #text
         Tipo = 3  TEXT: "ciao"

      Nome = #text
      Tipo = 3  TEXT: "
  "

   Nome = #text
   Tipo = 3  TEXT: "
"