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: "
"