Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JAVA] Parsing con SAX

  1. #1

    [JAVA] Parsing con SAX

    Ciao a tutti! Mi chiamo Marcello ed ho il seguente obiettivo:
    devo fare il parsing di un documento xml per recuperare e memorizzare in strutture java i valori letti.

    lo schema del documento xml è il seguente:

    Codice PHP:
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <
    xs:element name="indice">
    <
    xs:complexType>
    <
    xs:sequence>
    <
    xs:element name="tripla" type="triplaType" maxOccurs="unbounded" />
    </
    xs:sequence>
    </
    xs:complexType>
    </
    xs:element>

    <
    xs:complexType name="triplaType">
    <
    xs:sequence>
    <
    xs:element name="termID" type="xs:integer" use="required" maxOccurs="1" />
    <
    xs:element name="docID" type="xs:integer" use="required" maxOccurs="1" />
    <
    xs:element name="pos" type="xs:integer" use="optional" minOccurs="0" maxOccurs="1" />
    </
    xs:sequence>
    </
    xs:complexType>
    </
    xs:schema
    e un esempio di file xml minimo è:

    Codice PHP:
    <?xml version="1.0"?>
    <indice>
    <tripla>
    <termID>01</termID>
    <docID>10</docID>
    <pos>01</pos>
    </tripla>
    <tripla>
    <termID>02</termID>
    <docID>12</docID>
    <pos>02</pos>
    </tripla>
    </indice>
    ovvero, il file xml conterrà una sequenza (molto lunga) di triple, ognuna delle quali memorizza un "termID", un "docID" e una "pos".

    Ho preso come esempio il codice che ha postato l'utente "fegret" nel post
    http://forum.html.it/forum/showthrea...&highlight=sax
    ed ho semplicemente modificato le righe:

    Codice PHP:
    if(nodo=="autore"System.out.println(nodo+"-> "+s);
    if(
    nodo=="titolo"System.out.println(nodo+"-> "+s);
    if(
    nodo=="costo"System.out.println(nodo+"-> "+s); 
    con

    Codice PHP:
    if(nodo=="termID"System.out.println(nodo+"-> "+s);
    if(
    nodo=="docID"System.out.println(nodo+"-> "+s);
    if(
    nodo=="pos"System.out.println(nodo+"-> "+s); 
    (ovviamente poi al posto di stampare i valori, andrò a memorizzarli in una struttura).
    Funziona tutto, solo che, se uno dei valori termID o docID o pos sono lunghi esattamente 1 carattere, il metodo non funziona.
    Avete qualche consiglio da darmi?
    Un'altra cosa, se il file xml ha indentazioni allora il metodo non funziona.


    p.s. : Secondo voi, per raggiungere il mio obiettivo, sto facendo bene ad usare il codice suddetto, o mi consigliate un altro modo?

    Grazie mille in anticipo,
    Marcello

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Se vuoi farti una idea più dettagliata di come funziona e cosa fornisce un parser SAX, puoi vedere un mio vecchio esempio in questo post. Sperando ti sia utile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie!! Esempio molto utile...stranamente mi era sfuggito!

    Marcello

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.