Lettura file XML

di il
9 risposte

Lettura file XML

Ciao a tutti!

Sto portando avanti un programma che sia in grado di analizzare un file xml, sono giunto ad un buon risultato ma non riesco a risolvere un piccolo problema.
Avendo la seguente riga estrapolata dal file xml:

" <log id="7514e070-bf53-48f7-a5a9-c59c65951862" report-date="2017-07-02T03:34:02.493+02:00" boot-up="2017-06-26T16:35:36.777+02:00" log-sequence="0">"

Come faccio ad estrarre solo l'id?

Io sto girando intorno ad una soluzione del genere:

"NodeList log = document.getElementsByTagName("log");
Node logType = log.item(0);
id = logType.getFirstChild().getNodeValue();"

Ma quanto stampo il risultato o mi appare "null" oppure una stringa vuota.

9 Risposte

  • Re: Lettura file XML

    Ragnar ha scritto:


    "NodeList log = document.getElementsByTagName("log");
    Node logType = log.item(0);
    id = logType.getFirstChild().getNodeValue();"

    Ma quanto stampo il risultato o mi appare "null" oppure una stringa vuota.
    Il "id" è un attributo, non un nodo "figlio".

    Stai usando la API DOM W3C, giusto (probabilmente tramite JAXP)? Node ha un getAttributes() che però fornisce un NamedNodeMap, quindi non è comodissimo.

    Siccome con getElementsByTagName hai cercato i tag <log>, i Node del NodeList sono effettivamente degli Element. Fai il cast a Element e potrai usare il

    String getAttribute(String name)
  • Re: Lettura file XML

    Quello descritto da @andbin e' il metodo grezzo.

    C'e' un modo molto piu' smart: utilizzare l' XPath (https://en.wikipedia.org/wiki/XPat)

    Nel tuo caso scriveresti: "<path_from_root_root>/log/@id"

    piuttosto che "<path_from_root_root>/log/@report-date" oppure "<path_from_root_root>/log/@log-sequence"

    L'uso di XPath semplifica enormemente l'accesso agli XML e riduce enormemente gli errori nell'accesso al documento.
  • Re: Lettura file XML

    migliorabile ha scritto:


    Quello descritto da @andbin e' il metodo grezzo.
    Ma lui stava usando proprio quell'approccio, probabilmente per un qualche motivo. Senza sapere esattamente cosa deve fare e su che struttura esatta del XML ... non saprei nemmeno dirgli se è meglio XPath o no.
  • Re: Lettura file XML

    Essendo abbastanza nuovo nel settore non so quale sia meglio, in ogni caso ormai ho sviluppato tutto utilizzando API DOM e non torno indietro.
    @andbin scusa l'ignoranza ma...cosa intendi per fare "il cast a Element"?
  • Re: Lettura file XML

    Ragnar ha scritto:


    scusa l'ignoranza ma...cosa intendi per fare "il cast a Element"?
    Quindi stai usando XML in Java (argomento abbastanza "avanzato") e non sai cosa è un "cast" ?

    NodeList logs = .....
    Element logElement = (Element) logs.item(0);
  • Re: Lettura file XML

    Quindi dovrei avere una cosa così alla fine?

    "NodeList log = document.getElementsByTagName("log");
    Element logElement = (Element)log.item(0);
    id = logElement.getAttributes();"

    in output però mi esce "com.sun.org.apache.xerces.internal.dom.AttributeMap@1193f2d"
    p.s. non mi lascia inserire una stringa di ricerca come parametro a "getAttributes()"
  • Re: Lettura file XML

    Ragnar ha scritto:


    Quindi dovrei avere una cosa così alla fine?
    No.

    String getAttribute(String name)
  • Re: Lettura file XML

    Ma se scrivo pari pari "String getAttribute(String name)" mi da errore un po' su tutto... getAttributes diventa una variabile e "(String nome)" non viene neanche riconosciuto (nome immagino sia "id"(?).
  • Re: Lettura file XML

    Ti ho dato la signature del metodo. APPLICALO.
Devi accedere o registrarti per scrivere nel forum
9 risposte