Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371

    Estrarre informazioni da un XML

    Ciao ^____^

    Problema del giorno: ho un bel file xml e dovrei estrarne delle informazioni.

    Ho visto che andbin consigliava di usare il Sax, in quanto gestisce gli eventi (alla fin fine sarebbe la strada più simile a quella che ho usato inizialmente, ovvero scannare il file riga per riga e sperare che fosse strutturato bene).

    Mi chiedevo se non esistesse anche qualcosa che mi permette di dire "eccoti il file xml. Adesso dammi tutto quello che trovi nei tag <tag1>,<tag2>, <tag3>" senza dover gestire a mano le eccezioni.

    lo chiedo perché l'xml che ho io è fatto con una struttura tipo

    <lista_errori>
    <codice errore>eee</codice_errore>
    <altre_info>rrr</altre_info>
    <descrizione_errore>ergbbvg</descrizione_errore>
    <un'altra_info>efui</un'altra_info>
    <codice errore>eee</codice_errore>
    <altre_info>rrr</altre_info>
    <descrizione_errore>ergbbvg</descrizione_errore>
    <un'altra_info>efui</un'altra_info>
    </lista_errori>

    La lista errori è come dice il nome, una listona, in cui i vari errori sono uno sotto l'altro senza essere divisi o raggruppati tra loro, e l'unico elemento obligatorio per ogni errore è <descriuzione_errore> (terz'ultima tag di ogni gruppo).

    Quindi mi chiedevo se ci fosse un modo per estrarre tutto il blocco degli errori senza dovermi fare sege mentali strane per raggruppare gli errori correttamente.

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Considera anche il jdom
    TI permette di parsare il file in maniera molto facile.

    Se poi hai a disposizione anche l'xsd del file in questione allora puoi effettuarne la validazione.

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

    Re: Estrarre informazioni da un XML

    Originariamente inviato da Reiuky
    Ho visto che andbin consigliava di usare il Sax
    Beh, dipende ... non è che suggerisco sempre e solo SAX. Le 2 principali tecniche di parsing sono SAX e DOM (in Java ne esiste una terza chiamata StAX, "Streaming API for XML"). Ognuna delle tecniche ha vantaggi e svantaggi.
    Quindi bisogna sempre vedere come è la struttura del documento, quali estrazioni/elaborazioni si devono fare ecc....

    Originariamente inviato da Reiuky
    ovvero scannare il file riga per riga e sperare che fosse strutturato bene.
    In che senso "sperare che fosse strutturato bene"????
    Un documento XML, per essere tale innanzitutto deve essere "well formed", ben formato. E questo fondamentalmente vuol dire che deve per lo meno rispettare le regole sulla sintassi indicate nelle specifiche XML.

    Poi i parser non è che leggono il documento per forza "a righe" ... come leggano esattamente non lo so, presumibilmente a blocchi di caratteri .. ma sicuramente non si preoccupano minimamente dello "stile" di scrittura del documento. Cioè se i tag sono ben indentati o se un tag di chiusura compare o no sulla stessa riga del tag di apertura o cose del genere ...

    Originariamente inviato da Reiuky
    Mi chiedevo se non esistesse anche qualcosa che mi permette di dire "eccoti il file xml. Adesso dammi tutto quello che trovi nei tag <tag1>,<tag2>, <tag3>" senza dover gestire a mano le eccezioni.
    Scusa ma di quali "eccezioni" stai parlando?

    Originariamente inviato da Reiuky
    lo chiedo perché l'xml che ho io è fatto con una struttura tipo

    <lista_errori>
    <codice errore>eee</codice_errore>
    <altre_info>rrr</altre_info>
    <descrizione_errore>ergbbvg</descrizione_errore>
    <un'altra_info>efui</un'altra_info>
    <codice errore>eee</codice_errore>
    <altre_info>rrr</altre_info>
    <descrizione_errore>ergbbvg</descrizione_errore>
    <un'altra_info>efui</un'altra_info>
    </lista_errori>

    La lista errori è come dice il nome, una listona, in cui i vari errori sono uno sotto l'altro senza essere divisi o raggruppati tra loro
    Male ... mi sembra un po' "maccheronica" come struttura. Insomma ... ben poco strutturata e davvero poco utile!

    Originariamente inviato da Reiuky
    e l'unico elemento obligatorio per ogni errore è <descriuzione_errore> (terz'ultima tag di ogni gruppo).

    Quindi mi chiedevo se ci fosse un modo per estrarre tutto il blocco degli errori senza dovermi fare sege mentali strane per raggruppare gli errori correttamente.
    Ma a dire il vero il problema l'ha creato "a monte" chi ha pensato questa "bella" struttura .....

    Dal codice posso dedurre che un errore può avere 1 codice ( <codice_errore> ), delle altre info ( <altre_info> ) e una descrizione ( <descrizione_errore> ). Giusto?
    Ma c'è un qualche ordine prestabilito?? Cioè, se ci sono, allora sono nell'ordine:

    <codice_errore> poi <altre_info> poi <descrizione_errore>

    ? Perché non mi sembra molto chiaro:

    Nel tuo esempio:
    <codice errore>eee</codice_errore>
    <altre_info>rrr</altre_info>
    <descrizione_errore>ergbbvg</descrizione_errore>
    <un'altra_info>efui</un'altra_info>

    Questa altra informazione, di quale errore è? Del primo errore? (quindi hai 2 altre info?) O di quello successivo?

    Ti è chiaro?? È complicato analizzare questi dati ma solo perché non è stata realizzata una struttura più "furba".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Scusa...
    Ammetto che non sono stato chiaro, ma oggi ho un mal di testa che non mi fa pensare...

    prima, invece di leggere xml con un parser, leggevo il testo come fosse un file txt, e poi lo analizzavo a mano, cercando gli elementi e presumendo che fossero messi bene uno per riga.
    Ho iniziato a usare il parser solo oggi perché mi sono accorto che questo metodo non funziona benissimo.

    Il blocco di errore è formato da 4 tag, di cui l'unico obligatorio è il terzo (quindi <un'altra_info>) fa parte del primo errore.

    So che è strutturato male, ma, come ogni cosa su cui ho a che fare da quando ho iniziato il programma "è già stato mandato dai clienti e non è possibile cambiarlo"

    Quindi cercavo un metodo buono che mi permettesse di estrarre le info.

    Parlavo di eccezioni sbagliando. Il SAX legge il file generando degli eventi (non eccezioni).
    Potrei usare il SAX modificando poco la logica base del programma che leggeva le righe come string, ma con gli eventi è molto complesso elaborare il file. per questo speravo in un'altra tecnica

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.