Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Stampare solo un pezzo di codice e non tutto!

    Dovrei dire da nome nodo #document a w:styles non stampare NULLA e poi inizia a stampare tutto da w:styles in poi....
    ma se faccio così mi stampa solo w:styles e non il resto...

    Dove sbaglio (in verde quello per fare questo passaggio)
    codice:
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import javax.xml.parsers.*;
    import java.io.*;
    
    /** DomDocumentCleanParser: versione di DomDocumentParser
    
        con output dei soli elementi di interesse per il nostro esempio.
    
        */
    public class CopiaDom
    {
      public static org.w3c.dom.Node getChild(org.w3c.dom.Node parentNode, int childIndex)
      {
        org.w3c.dom.Node childNode = parentNode.getChildNodes().item(childIndex);
        return childNode;
      }
    
      /* Array che mappa i tipi di elemento con l'indice int corrispondente
    
         * alle specifiche per i node types di:
    
         * Document Object Model (DOM) Level 2 Core Specification
    
         * (http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113)
    
         */
      static final String[] typeName = { "none", "Element", "Attr", "Text", "CDATA", "EntityRef", "Entity", "ProcInstr", "Comment", "Document", "DocType", "DocFragment", "Notation" };
    
      public static void main(String[] args)
      {
        if ( args.length != 1 )
        {
          System.err.println("Usage: java CopiaDom nomefile.xml");
          System.exit(1);
        }
        CopiaDom ddp = new CopiaDom();
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try
        {
          PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("Tesi.txt", false)));
          DocumentBuilder builder = dbf.newDocumentBuilder();
          Document document = builder.parse(new File(args[0]));
          ddp.printNodeInfo(pw, document);
          pw.close();
        }
        catch (FileNotFoundException fnf)
        {
          fnf.printStackTrace();
        }
        catch (SAXException sxe)
        {
          Exception x = sxe;
          if ( sxe.getException() != null )
            x = sxe.getException();
          x.printStackTrace();
        }
        catch (ParserConfigurationException pce)
        {
          pce.printStackTrace();
        }
        catch (IOException ioe)
        {
          ioe.printStackTrace();
        }
      }
    
      // main
      /** printNodeInfo(Node node)
    
        *  Metodo che esplora l'albero Dom ricorsivamente e stampa a video
    
         *  le informazioni sugli elementi.
    
         */
      private void printNodeInfo(PrintWriter pw, Node currentNode)
      {
        int cont = 0; 
        String sNodeName = currentNode.getNodeName();
        int iNodeType = currentNode.getNodeType();
        String sNodeValue = currentNode.getNodeValue();
        int iChildNumber = currentNode.getChildNodes().getLength();
        NamedNodeMap nnmAttributes = currentNode.getAttributes();
        if ( sNodeName != "#document" )
          cont = 0;
        if ( sNodeName == "w:styles" )
          cont = 1;
        if ( cont == 1 )
        { 
          System.out.print("\n");
          System.out.println("Nome nodo: " + sNodeName);
          System.out.println("Tipo nodo: " + typeName[iNodeType]);
          System.out.println("Valore nodo: " + sNodeValue);
          System.out.println("Numero figli: " + iChildNumber);
          System.out.println("Attributi: " + printAttributes(nnmAttributes));
          pw.flush();
          pw.println();
          pw.flush();
          pw.println("Nome nodo: " + sNodeName);
          pw.flush();
          pw.println("Tipo nodo: " + typeName[iNodeType]);
          pw.flush();
          if ( sNodeValue != null )
            pw.println("Valore nodo: " + sNodeValue);
          pw.flush();
          if ( iChildNumber != 0 )
            pw.println("Numero figli: " + iChildNumber);
          pw.flush();
          if ( printAttributes(nnmAttributes) != "assenti" )
            pw.println("Attributi: " + printAttributes(nnmAttributes));
          pw.flush();
        } 
        //Se non si tratta di una foglia continua l'esplorazione ricorsivamente
        if ( iChildNumber > 0 )
        {
          NodeList nlChilds = currentNode.getChildNodes();
          for ( int iChild = 0; iChild < iChildNumber; iChild++)
          {
            printNodeInfo(pw, nlChilds.item(iChild));
          }
        }
      }
    
      /** printAttributes(NamedNodeMap nnm)
    
         *  Metodo utilizzato per la formattazione degli attributi ricavati da
    
         * un elemento.
    
         */
      private static String printAttributes(NamedNodeMap nnm)
      {
        String sAttrList = new String();
        if ( nnm != null && nnm.getLength() > 0 )
        {
          for ( int iAttr = 0; iAttr < nnm.getLength(); iAttr++)
          {
            sAttrList += nnm.item(iAttr).getNodeName();
            sAttrList += "=";
            sAttrList += nnm.item(iAttr).getNodeValue();
            sAttrList += "; ";
          }
          return sAttrList;
        }
        else
        {
          return "assenti";
        }
      }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    10
    Non so se è questa la soluzione, ma anzichè
    if ( sNodeName != "#document" )
    cont = 0;
    if ( sNodeName == "w:styles" )
    cont = 1;
    if ( cont == 1 )

    usa :
    if ( !sNodeName.equals("#document" ))
    cont = 0;
    if ( sNodeName.equals("w:styles" ))
    cont = 1;
    if ( cont == 1 )

  3. #3
    Grazie della risposta, ma il problema non risiede nell'if...
    ma forse nel concetto per cui sbaglio qualcosa...
    Mi riconosce il nome del nodo anche col mio metodo...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Fai attenzione: per rispondere ad una discussione devi essere dentro alla discussione e cliccare su "Rispondi"... se clicchi su "NUOVO" crei una nuova discussione.
    Infatti hai duplicato questa discussione (ho rimosso io il duplicato).

    A questo punto posso chiudere l'altra discussione e rimandare a questa.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Mi ero sbagliato, ma purtroppo qui la funzione CANCELLA per correggere errori non fatti volutamente non c'è...

    GRadirei comunque una risposta, visto che non so come comportarmi o meglio non ottengo i risultati sperati...

  6. #6
    Alla fine sono riuscito a mettere tutto a posto.

    Ora mi chiedo.

    Devo fare un programma che legga il file creato e mi ponga dei controlli.
    Mi conviene farlo tutto dentro la mia classe, oppure mi conviene fare un programma separato?

  7. #7
    potresti postare la soluzione che hai trovato dato che anch'io ho un problema simile? Grazie!!

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.