Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Problema lettura file XML

    Dovrei leggere un file xml , in android , posto sulla SDCARD . Il file è questo

    <INTERVENTI>
    <intervento>
    <NomeInfermiere>Elisa</NomeInfermiere>
    <CognomeInfermiere>Montereale</CognomeInfermiere>
    <Data>2012-07-10</Data>
    <Ora>15:20:00</Ora>
    <indirizzo>Via Mazzini 5</indirizzo>
    <citta>Bitonto</citta>
    <nomePaziente>Giuseppe</nomePaziente>
    <cognomePaziente>Fuoco</cognomePaziente>
    <eta>56</eta>
    <cellulare>3335678921</cellulare>
    <tipoIntervento>Esame delle urine</tipoIntervento>
    </intervento>
    </INTERVENTI>


    e il codice con cui "tento di leggerlo " è questo :
    codice:
    public void riempi(String file) throws JDOMException, ParserConfigurationException, SAXException, IOException { 
    InputStream obj_is = null;
     org.w3c.dom.Document obj_doc = null;
     DocumentBuilderFactory doc_build_fact = null;
     DocumentBuilder doc_builder = null;
     obj_is = new FileInputStream(file); 
    doc_build_fact = DocumentBuilderFactory.newInstance();
     doc_builder = doc_build_fact.newDocumentBuilder();
     obj_doc = doc_builder.parse(obj_is);
     NodeList obj_nod_list = null;
     if(null != obj_doc) {
     org.w3c.dom.Element feed = obj_doc.getDocumentElement(); 
    obj_nod_list = feed.getElementsByTagName("intervento");
     }
     System.out.println("NODI:"+obj_nod_list.getLength()); 
    Node e = obj_nod_list.item(0);
     System.out.println(e.hasAttributes());
     }
    Il problema è che riesco a visualizzare quanti nodi ha il file xml,ovvero 1 . Ma quando invoco il metodo hasAttributes mi dice che non ci sono attributi...il che è falso...Come faccio a leggere tutti gli attributi ?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    Invece è verissimo.
    Il nodo "intervento" non ha alcun attributo, ha dei figli.

    codice:
    <intervento attributo="valore">
       <figlio1> ... </figlio1>
    </intervento>
    Questo è un nodo con un attributo di nome "attributo" e valore "valore".

    Tu devi prendere i figli ( getChildren() ).


    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

  3. #3
    Grazie di avermi aiutato a risolvere l'inghippo..quindi quelli sono figli.. ..ma ora non riesco a leggere per esempio il testo contenuto tra i tag " NomeInfermiere" ..come faccio :/ ??

  4. #4
    Ho provato , ma non riesco a leggere i figli in nessun modo ...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    Hai ottenuto un oggetto di tipo NodeList che hai chiamato "obj_nod_list".
    Questo oggetto rappresenta una lista di tutti i nodi chiamati "intervento". Nel tuo caso, sarà una lista con un solo elemento. Devi, quindi, prendere questo elemento ed ottenerne i figli:

    codice:
    // Ottengo il primo (e unico) nodo "intervento"
    Node intervento = obj_nod_list.item( 0 );
    
    // Ottengo la lista dei suoi figli
    NodeList listaFigli = intervento.getChildNodes();
    
    // Prendo il primo dei suoi figli: "NomeInfermiere"
    Node primoFiglio = listaFigli.item( 0 );
    
    // Stampo il suo valore:
    System.out.println( primoFiglio.getNodeValue() );
    Dovrebbe andare.
    Chiaramente questo è un esempio per prelevare il primo dei figli... se vuoi puoi scorrere la lista e prenderli tutti.

    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
    Ho provato esattamente come hai detto tu . Non mi visualizza niente..ma al contempo non ricevo errori nel logCat...

  7. #7
    ho provato a fare un controllo del genere :

    String inf = primoFiglio.getNodeValue();
    System.out.println("1");
    System.out.println(inf);
    System.out.println("2");

    Mi stampa "1" e "2" ..senza stamparmi inf..ergo vuol dire che inf è vuota e non so perchè :/

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    Sì, ogni volta mi dimentico che la libreria standard è contorta all'inverosimile (e ogni volta ringrazio gli inventori della libreria JDom).

    Il problema è che il primo figlio è un elemento di tipo TEXT (ovvero, lo spazio che c'è fra la chiusura del tag e l'inizio del successivo tag, comprensivo del carattere invio), quindi bisogna scorrere come se vi fosse un sottoalbero.

    Ho scritto una piccola routine per farti capire come funziona:

    codice:
    // Ottengo il primo (e unico) nodo "intervento"
    Node intervento = obj_nod_list.item( 0 );
            
    // Stampo tutti i suoi figli:
    System.out.println( getFiglio(intervento, "NomeInfermiere") );
    System.out.println( getFiglio(intervento, "CognomeInfermiere") );
    System.out.println( getFiglio(intervento, "Data") );
    System.out.println( getFiglio(intervento, "Ora") );
    ...
    Dove il metodo "getFiglio()" è questo qui:

    codice:
    private String getFiglio(Node padre, String nomeFiglio) {
       Element el = (Element) padre;
       NodeList listaSottoFigli = el.getElementsByTagName(nomeFiglio).item(0).getChildNodes();
    
       Node nodoFiglio = (Node) listaSottoFigli.item(0);
    
       return nodoFiglio.getNodeValue();
    }
    Come vedi è piuttosto complessa la navigazione degli XML usando la libreria standard.


    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

  9. #9
    Devo per forza castare Node Padre in element? dà errore . Inoltre con i suggerimenti di eclipse viene così :


    codice:
    public String getFiglio(Node padre, String nomeFiglio) { 
    Element el = (Element) padre; 
    NodeList listaSottoFigli = ((org.w3c.dom.Document)el).getElementsByTagName(nomeFiglio).item(0).getChildNodes(); Node nodoFiglio = (Node) listaSottoFigli.item(0); 
    return nodoFiglio.getNodeValue(); }
    in quanto getElementsByTagName viene segnalato come errore se lascio el normale.

  10. #10
    Perfetto ho risolto . Ti ringrazio ..=)

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.