Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Esercizio org.w3c.dom

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315

    Esercizio org.w3c.dom

    Salve,
    devo fare una classe che faccia il parse di un file xml e usi la libreria org.w3c.dom
    In qualche modo la cosa deve essere ricorsiva. Ho a disposizione i seguenti metodi:

    parseDocument(xmlFile:String);
    parse(node:NodeList);
    parse(node:NodeList ; container:Object);

    Qualcuno ha qualche suggerimento da darmi per scrivere questa classe?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Esercizio org.w3c.dom

    Originariamente inviato da koala81
    devo fare una classe che faccia il parse di un file xml e usi la libreria org.w3c.dom
    org.w3c.dom non è una "libreria" ... è un package relativo alla API del DOM, Document Object Model.

    Originariamente inviato da koala81
    Qualcuno ha qualche suggerimento da darmi per scrivere questa classe?
    Innanzitutto devi stabilire cosa usare, se usare direttamente un parser XML (es. Xerces) o sfruttare ad esempio le API di JAXP.

    Con le API di JAXP, per leggere un documento usando l'approccio DOM l'esempio più basilare e minimale è questo:

    codice:
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    
    public class BasicJaxpDom
    {
        public static void main (String[] args)
        {
            try
            {
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();
                DocumentBuilder builder = factory.newDocumentBuilder ();
                Document document = builder.parse ("documento.xml");
    
                Element root = document.getDocumentElement ();
    
                // qui si ha un org.w3c.dom.Element che è l'elemento "radice"
                // del documento XML e si può usare per "navigare" in tutto l'albero
                // .....
            }
            catch (Exception e)
            {
                System.out.println (e);
            }
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    Grazie per la risposta.
    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...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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: "
    "
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.