Visualizzazione dei risultati da 1 a 10 su 10

Discussione: xml to hashmap

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327

    xml to hashmap

    Salve,
    esiste qualcosa di pronto in java che mi permetta di importare un xml in un hasmap?? o in qualche altra collection, quello che alla fine a me serve è importare un file xml, che puo anche avere più nodi annidati, in una collection cosi da poter avere chiave/valore. In questo modo facendo un get della chiave nella collection, otterrei un valore o un ulteriore oggetto di valori. Non so se mi sono spiegato

    grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    prova ad utilizzare jaxb

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    non riesco a capire molto da questa documentazione, ho cercato un po su internet ma non mi è chiaro l'utilizzo di questa libreria, tra l'altro non capisco se devo formattare l'xml in un certo modo oppure posso utilizzare una formattazione generica
    non esiste un tutorial o pezzi di codice esempio??

    grazie mille per il tuo aiuto

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Cmq nella pagina che ti ho postato ci sono anche degli esempi,qui ne trovi uno. Per la formattazione che io sappia non c'è nessun obbligo, per sicurezza guardati le specifiche w3c.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Dubito seriamente che esista qualcosa di preconfezionato che funzioni con un qualsiasi generico XML. Primo perchè non avrebbe alcun senso, secondo perchè sarebbe impossibile data la complessità che un XML può avere, terzo perchè alcuni XML rendono impossibile fare ciò che chiedi.

    Che HashMap dovrebbe/potrebbe essere creata da questo (valido) XML?

    codice:
    <?xml version="1.0" encoding="UTF-8">
    <MieiDocumenti>
       <Documento>Pippo</Documento>
       <Documento>Pluto</Documento>
       <Documento>Paperino</Documento>
    </MieiDocumenti>
    Non esiste nessuna HashMap in grado di mappare correttamente questo XML: la chiave sarebbe sempre la stessa (Documento), per 3 valori distinti (Pippo, Pluto, Paperino). E non si può nemmeno prendere in considerazione come chiave il full-path del nodo foglia: per tutti e tre sarebbe "MieiDocumenti.Documento".

    Quindi, direi di no: uno strumento preconfezionato non può esistere, ma lo puoi creare tu usando una libreria per il trattamento degli XML (come potrebbe essere JDom, Jaxb, XPath, ecc). E' chiaro che l'XML stesso dovrà essere costruito seguendo delle precise regole perchè, come dimostrato sopra, non si può partire da un generico XML per ottenere ciò che chiedi.


    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    quello che temevo...grazie per la risposta
    mi togli una curiosità??
    sto lavorando con xpath e ho un dubbio che mi assilla. Prima di venire alle domande posto un pezzo di codice che utilizzo per la parserizzazione e la lettura in xpath

    codice:
    private Document createXMLDocument(String fileName) throws Exception {
            DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
            domFactory.setNamespaceAware(true);
            DocumentBuilder builder = domFactory.newDocumentBuilder();
            Document doc = builder.parse(fileName);
     
            return doc;
    }
    
        private NodeList readXMLNodes(Document doc, String xpathExpression) throws Exception {
            XPath xpath = XPathFactory.newInstance().newXPath();
            XPathExpression expr = xpath.compile(xpathExpression);
     
            Object result = expr.evaluate(doc, XPathConstants.NODESET);
            NodeList nodes = (NodeList) result;
     
            return nodes;
        }
    esempio lettura

    codice:
    doc = m.createXMLDocument("src/file.xml");
    nodes = m.readXMLNodes(doc, "//Main/Node");

    1. In termini prestazionali xpath fa un eccessivo utilizzo del processore? mi spiego meglio...
    In parole povere sto sviluppando un applicazione server multithread che, ad ogni connessione da parte di un client, deve leggere un xml di una certa dimensione(casi in cui l'xml contiene pochissimi nodi e altri casi quando può contenere un bel po di nodi anche annidati).
    Considerando che eseguiro svariate letture su questo xml con xpath, vorrei capire se in termini di prestazioni si fa un eccessivo utilizzo del processore.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non ho mai usato XPath in vita mia, quindi non sono in grado di valutare la libreria in termini prestazionali.

    C'è da considerare, comunque, che se tale libreria continua ad essere sviluppata e usata, è probabile che abbia i suoi vantaggi e che certi "problemi" o non sussistano o siano marginali.


    Io ho sempre usato JDom e, finora, mi sono trovato molto bene. Non ho mai lavorato, comunque, con file XML di dimensioni eccezionali e bisognerebbe capire quali sono le dimensioni dei file con cui avrai a che fare tu.


    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    ma con JDOM esistono dei metodi già pronti che ti permettono di prelevare un valore partendo dal nome di un nodo senza doverti scorrere tutti i nodi??

    cioè una cosa del tipo

    xml.getNode("nodo20").value e la libreria fa il lavoro sporco andando a prendere il valore del nodo specificato, oppure un attributo di un nodo, premetto che il mio xml non ha mai nodi con lo stesso nome.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    con jaxb hai uno o piu classi che rappresentano il tuo xml e col quale puoi accedere a i nodi, testi, modificare o creare il tuo xml(detto in parole povere ovviamente, ma per conoscere tutti i dettagli c'è la documentazione che ti ho postato). Non usi un hashmap ma un oggetto che ti sei creato tu, personalizzato , credo sia la cosa che si avvicini di piu a quanto hai chiesto nel tuo primo post. Ovviamente funziona con qualunque generico xml, basta definire correttamente le classi e lo schema. L'unica cosa è che forse è più difficile da apprendere tutto il meccanismo che ci sta dietro... cmq buona fortuna

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Usando JDom il file XML viene visto come un albero (in effetti, è un albero), di conseguenza si accede a ciascun nodo come si scorrerebbe un albero.

    Avendo, ad esempio, un file XML di questo tipo

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <MioDocumento>
       <PrimoLivello>
          <SecondoLivello>
             <TerzoLivello>Pippo</TerzoLivello>
          </SecondoLivello>
       </PrimoLivello>
    </MioDocumento>
    Per ottenere il valore della foglia "TerzoLivello" si procede in questo modo:

    codice:
    String valore = documento.getRootElement().getChild("PrimoLivello").getChild("SecondoLivello").getChild("TerzoLivello").getValue();
    Esistono, ovviamente, anche i metodi getAttributeValue(String nomeAttributo) per ottenere il valore di un attributo per un eventuale tag.

    Chiaramente, in questo modo è semplice progettare un sistema ricorsivo di recupero di tutti i valori di tutti i nodi a tutti i livelli.


    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

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.