Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150

    [Java] Convertire stringa di testo in xml e viceversa

    Ciao a tutti.
    Ho il seguente problema: voglio convertire una stringa di testo in xml e di conseguenza attuare anche il processo inverso ovvero convertire la stringa da xml a testo normale.

    Ora, son riuscito tramite qualche aiuto e qualche guida a realizzare il seguente metodo:

    Codice PHP:
      
        
    public String textToXML(javax.swing.text.Document swingDocumentthrows MessageFormatException {
        
    DocumentBuilderFactory documentFactory DocumentBuilderFactory.newInstance();
        
    DocumentBuilder documentBuilder;
        try {
            
    documentBuilder documentFactory.newDocumentBuilder();
        } catch (
    ParserConfigurationException ex) {
            throw new 
    MessageFormatException("Errore durante la creazione del DocumentBuilder"ex);
        }
        
    org.w3c.dom.Document document documentBuilder.newDocument();
        
    Element root document.createElement("message");
        
    document.appendChild(root);
        
    //Element bold = document.createElement("bold");
    //    bold.setTextContent("pippo");
      //  root.appendChild(bold);
        
    Element messageContent document.createElement("text");
        try {
            
    messageContent.setTextContent(swingDocument.getText(0swingDocument.getLength()));
        } catch (
    BadLocationException ex) {
            throw new 
    MessageFormatException("Errore durante l'estrazione del testo dal document swing"ex);
        }
        
    root.appendChild(messageContent);

        
    //scrive il document xml su una stringa di testo
        
    TransformerFactory transformerFactory TransformerFactory.newInstance();
        
    Transformer transformer;
        try {
            
    transformer transformerFactory.newTransformer();
        } catch (
    TransformerConfigurationException ex) {
            throw new 
    MessageFormatException("Errore durante la creazione del Transformer"ex);
        }
        
    StringWriter buffer = new StringWriter();
        
    StreamResult result = new StreamResult(buffer);
        
    DOMSource source = new DOMSource(document);
        try {
            
    transformer.transform(sourceresult);
        } catch (
    TransformerException ex) {
            throw new 
    MessageFormatException("Errore durante la trasformazione del testo in xml"ex);
        }
        
    System.out.println ("prova");
        return 
    buffer.toString();

        } 
    Ora, in questo modo io converto la mia stringa di testo in xml.
    Ad esempio, partendo dalla stringa "ciao prova testo", ottengo come output la seguente stringa:

    Codice PHP:
    <?xml version="1.0" encoding="UTF-8" standalone="no"?><message><text>ciao prova testo</text></message>
    Fin qui tutto ok, ora il problema principale, ovvero:
    la mia stringa da convertire viene da un JTextPane, e la stringa si porta dietro varie proprieta' del testo come colore del font, stile (grassetto, corsivo, etc).
    Ora quindi chiedo il vostro aiuto : come faccio per suddividere il mio documento xml in modo da avere vari nodi quanti sono gli stili possibili?
    Ad esempio un nodo <bold> o un <italic> etc? E per il colore del testo?

    Intuitivamente dovro' fare un ciclo for e scandagliare tutto il documento (che cambia sempre ovviamente) alla ricerca delle parole in grassetto etc, ma non capisco come fare.
    Spero possiate aiutarmi, ciao

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

    Re: [Java] Convertire stringa di testo in xml e viceversa

    Originariamente inviato da Skaffa
    Intuitivamente dovro' fare un ciclo for e scandagliare tutto il documento (che cambia sempre ovviamente) alla ricerca delle parole in grassetto etc, ma non capisco come fare.
    Innanzitutto vuol dire che hai a che fare con un javax.swing.text.StyledDocument. La cui struttura interna è più complessa di quello che pensi. Contiene degli Element che possono contenere altri Element. Per ogni Element c'è un set di attributi modellato dalla interfaccia AttributeSet.
    C'è poi la classe javax.swing.text.StyleConstants che contiene metodi di utilità per leggere/settare attributi o anche solo per verificare es. "c'è l'attributo bold?".

    Prima di partire in "quarta", guarda la documentazione dei tipi che ho menzionato e prova innanzitutto a fare dei metodi per effettuare il "dump" (basta anche solo su System.out!) della struttura di un StyledDocument. Così inizi a capire come è composto il documento.
    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
    Mar 2007
    Messaggi
    150
    Ho letto sulle documentazioni ma non son riuscito a capirci molto.
    Riusciresti ad indirizzarmi al primo step, ovvero come "scandagliare" una stringa e ad esempio catturare tra i tag <bold></bold> tutti i caratteri in grassetto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Skaffa
    Ho letto sulle documentazioni ma non son riuscito a capirci molto.
    Riusciresti ad indirizzarmi al primo step, ovvero come "scandagliare" una stringa e ad esempio catturare tra i tag <bold></bold> tutti i caratteri in grassetto?
    Innanzitutto ti dico subito che tra i miei Java Examples (vedi firma) sezione Text components c'è almeno 1 esempio in cui viene mostrato come inserire "programmaticamente" del testo "stilizzato" dentro un StyledDocument.

    Quindi il suggerimento che posso darti è quello di partire con la conversione da documento XML (in stringa o su file o altro ... cambia poco) a documento StyledDocument. In pratica partendo da una "sorgente" (che ripeto, può essere di vari tipi) si fa il "parsing" del documento XML e si estraggono le varie informazioni "riconoscendo" man mano quali sono i tag e le parti di testo e si inserisce testo e attributi in un StyledDocument.
    E ti suggerisco questo semplicemente perchè è un pochino più semplice rispetto al contrario (analizzare il contenuto di un StyledDocument e scrivere il documento XML).

    Per fare il parsing esistono generalmente 2 approcci: DOM e SAX. Non so se conosci la differenza. Comunque trovi esempi a riguardo sempre tra i miei esempi (sezione XML technologies).
    L'unica particolarità è che un documento XML che descrive un testo stilizzato si dice che è "document centric" in contrapposizione a "data centric".
    In un XML "data centric" c'è una struttura fissa, molto "rigorosa" e oltretutto ripetitiva. Pensa ad un documento XML che descrive dei libri, che potrebbe essere ad esempio:

    codice:
    <libri>
      <libro titolo="blabla">
        <autore>pippo</autore>
        <autore>pluto</autore>
      </libro>
      ....tanti altri libri fatti allo stesso modo....
    </libro>
    Per come è stata pensata questa struttura, è fissa e ripetitiva. Ci possono essere N <libro> e ognuno contiene M <autore>.

    In un XML "document centric" la struttura può certamente avere una base fissa e rigorosa ma certi tag, specialmente quelli che descrivono gli "attributi" possono essere innestati e ripetuti in modo abbastanza arbitrario.
    Quindi il parsing è un pochino più complicato rispetto ad un documento "data centric" dove la struttura è completamente fissa e ben nota a priori.

    Ti consiglio anche di partire avendo in testa di descrivere e gestire i "paragrafi". In un StyledDocument i paragrafi sono testo separato da un newline. E certi attributi come ad esempio l'alignment (vedi setAlignment() di StyleConstants) valgono appunto solo per un paragrafo nella sua interezza.

    Quindi una ipotesi di documento XML potrebbe essere:

    codice:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <text>
      <para align="center">
        Prova di <bold>testo</bold> <italic>stilizzato</italic>
      </para>
      <para>
        Questo è un esempio di testo <bold><italic>stilizzato</italic></bold>.
      </para>
    </text>
    Inizia a vedere come fare il parsing del documento XML con approccio DOM o SAX. Se hai dubbi/problemi, chiedi.
    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.