Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207

    [java] aiuto per documento xml

    Ragazzi ho da fare un lavoro di tesi.Praticamente ho un programma che mi genera un file xml (questo file xml contiene al suo interno i turni di ogni medico nell'arco del mese preso in considerazione), praticamente il prof mi ha detto di far in modo che questi turni possano essere modificati (se ad esempio un medico ha bisogno di cambiare il proprio turno, deve avere la possibilità di farlo).Ora mi chiedo..poichè i turni dei vari medici sono memorizzati in questo file xml, è possibile con la tecnologia Stax modificare alcuni campi di questo documento xml?

    per esempio è possibile modificare questo frammento di documento xml:

    <Presente Data="2/5/2005">
    <Turno>Pomeriggio</Turno>
    <TipologiaTurno>Turno di Pomeriggio</TipologiaTurno>
    <Reperibilità/>
    </Presente>

    io dovrei poter modificare ad esempio ciò ke è scritto nel tag turno, scrivendo invece di Pomeriggio, ad esempio notte (che sta a indicare il turno di notte)..tutto questo è possibile farlo attraverso java e con tecnlogia stax??tenente conto ke un determinato medico dovrà usare una interfaccia adatta, attraverso la quale selezionerà il valore da voler cambiare..e attraverso la quale scriverà il nuovo valore che vorrà inserire (valore ke andrà memorizzato nel documento xml, al posto del vecchio valore).

    Nn so se ho reso bene l'idea..mah in sintesi mi serve sapere se è possibile tramite java modificare i campi di un determinato documento xml.

    Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Con qualsiasi linguaggio di programmazione che permetta di accedere ai file è possibile modificare un documento XML... altro non è che un file di testo.

    Ad ogni modo, per poter lavorare bene con tali file, ti consiglio l'utilizzo di una libreria ad hoc (parli di Stax, che io, personalmente, non ho mai nemmeno sentito nominare). Prova a cercare, sia in questo forum, che su Google, JDom.


    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
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] aiuto per documento xml

    Originariamente inviato da jin85
    è possibile con la tecnologia Stax modificare alcuni campi di questo documento xml?
    StAX è un parser molto recente introdotto nelle API JAXP 1.4 e integrato in Java SE 6. In effetti StAX permette anche la scrittura di file XML (vedi i link sotto) ma nota che si intende una scrittura completa dell'intero documento dall'inizio. Cioè devi avere tu i dati del documento in memoria in una qualche tua struttura dati per poterli poi scrivere completamente sul file XML.

    Se vuoi sapere qualcosa di più di StAX, vedi:
    https://java.sun.com/webservices/doc...oc/SJSXP2.html
    e
    http://www.xml.com/pub/a/2003/09/17/stax.html (in particolare la seconda pagina che spiega la scrittura).

    Inizia a vedere i link che ho indicato. Non so dirti se davvero StAX ti può essere comodo/utile. Dipende da come devi trattare e gestire i dati in modo preciso. Potrebbe forse esserti più comodo DOM invece di StAX ... ma bisogna vedere.
    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
    Registrato dal
    Apr 2008
    Messaggi
    207
    Ringrazio tutti voi per le risposte molto veloci, però sto cercando proprio un suggerimento su cosa mi conviene usare..x questo ho chiesto aiuto a voi ke ne sapete più di me poichè il tempo ke ho è limitato mi interesserebbe sapere se devo procedere con dom (e quindi documentarmi riguardo DOM) oppure procedere con Stax (e quindi documentarmi con Stax).Quindi cerco di spiegarmi meglio..l'applicazione che il prof. mi ha consegnato, una volta portata a termine l'esecuzione, genera il file xml (in allegato).Il compito che il prof mi ha dato è il seguente : devo programmare in java un modulo che mi permetta di modificare qualsiasi campo di quel documento xml (il campo da modificare può essere qualunque campo di quel documento xml e viene deciso dal medico addetto ai turni, come l'esempio che ho fatto sopra). Per fare questa cosa quindi cosa mi conviene usare??DOM o Stax??

    Giusto per precisare, il medico agirà sul file xml tramite un'interfaccia (ke io progetterò)..xkè naturalmente un medico qualsiasi nn sa dove mettere mani in un file xml ...quindi devo progettare anke un'interfaccia tramite la quale il medico andrà a modificare quel file xml.(questa era giusto una precisazione x farvi una panoramica del mio lavoro, la parte che più mi interessa è quella precedente.)

    Grazie ancora.

    File xml allegato : http://www.zshare.net/download/106207012abc8e74/

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da jin85
    Per fare questa cosa quindi cosa mi conviene usare??DOM o Stax??
    Usando DOM, alla fine del parsing ottieni un "albero" di nodi in cui puoi "navigare" avanti e indietro nei vari sotto-rami come più ti fa comodo. Con StAX invece non hai alcuna struttura dati di per sé, nel senso che StAX è un parser "pull", è l'applicazione che "tira fuori" dal parser i vari pezzetti volta per volta. Quindi è l'applicazione che tira fuori un elemento per volta e si chiede: è l'inizio di un tag? è la fine di un tag? è un nodo di testo? ecc... e quindi fa quello che deve fare.

    Originariamente inviato da jin85
    Giusto per precisare, il medico agirà sul file xml tramite un'interfaccia (ke io progetterò)
    Questa è un'altra questione. La tua interfaccia utente userà ad esempio dei componenti JTree, JList o altro (che devi stabilire tu) ma a parte questo, sarebbe opportuno realizzare delle classi che "modellano" la struttura del tuo documento XML.

    Cioè dovresti avere una classe SchedulazioneRaggruppamento che contiene le proprietà nome, codice, dataInizio, ecc... e anche una proprietà che rappresenta una lista di oggetti UnitaOperativa che ha una proprietà codice e una lista di oggetti Medico ecc.....

    Non so se ho reso l'idea. In questo modo risulta semplice gestire le varie entità. Visto che avrai una "tua" struttura dati, a questo punto non è tanto importante scegliere un metodo di parsing che fornisca una "sua" struttura dati. In questo caso DOM non è la scelta migliore, visto che tra l'altro il documento non è proprio piccolino. Perché occuperebbe molta memoria per una struttura dati (l'albero dei nodi) che comunque non sfrutteresti appieno.

    Sarebbe più utile l'approccio SAX o StAX. Entrambi, anche se in modo diverso, ti permettono di ottenere "al volo" i vari elementi, cioè nel momento stesso in cui si presentano nel documento durante la fase di parsing.

    Originariamente inviato da jin85
    File xml allegato : http://www.zshare.net/download/106207012abc8e74/
    Il file l'ho visto. È scomodo da leggere visivamente perché è tutto su una unica riga! Ma è abbastanza normale farlo così se è generato programmaticamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    Allora procediamo con ordine andbin scusami, ma altrimenti mi incasino..allora abbiamo quindi stabilito che per analizzare e successivamente modificare il documento posso usare la tecnlogia Sax o Stax. (quella Dom è sconsigliata xkè il documento è troppo grande).Ora..

    Originariamente inviato da andbin
    Con StAX invece non hai alcuna struttura dati di per sé, nel senso che StAX è un parser "pull", è l'applicazione che "tira fuori" dal parser i vari pezzetti volta per volta. Quindi è l'applicazione che tira fuori un elemento per volta e si chiede: è l'inizio di un tag? è la fine di un tag? è un nodo di testo? ecc... e quindi fa quello che deve fare.
    Mi spiegheresti meglio questo concetto??ho capito ke StAX nn ha una sua struttura..ma parser pull ad esempio ke significa??

    Originariamente inviato da andbin
    Questa è un'altra questione. La tua interfaccia utente userà ad esempio dei componenti JTree, JList o altro (che devi stabilire tu) ma a parte questo, sarebbe opportuno realizzare delle classi che "modellano" la struttura del tuo documento XML.
    xkè dici che dovrei usare una JTree,JList ??caso mai dopo con paint ti faccio uno schizzo dell'interfaccia ke avevo pensato.

    Originariamente inviato da andbin
    Cioè dovresti avere una classe SchedulazioneRaggruppamento che contiene le proprietà nome, codice, dataInizio, ecc... e anche una proprietà che rappresenta una lista di oggetti UnitaOperativa che ha una proprietà codice e una lista di oggetti Medico ecc.....

    Non so se ho reso l'idea. In questo modo risulta semplice gestire le varie entità. Visto che avrai una "tua" struttura dati, a questo punto non è tanto importante scegliere un metodo di parsing che fornisca una "sua" struttura dati.
    mi faresti un esempio pratico di queste classi che modellano la struttura??xkè nn ho capito bene cosa vuoi intendere.

    Originariamente inviato da andbin
    Sarebbe più utile l'approccio SAX o StAX. Entrambi, anche se in modo diverso, ti permettono di ottenere "al volo" i vari elementi, cioè nel momento stesso in cui si presentano nel documento durante la fase di parsing.
    che vuoi dire con ottenere al volo??scusami se insisto..ma è la prima volta ke mi trovo in quest'ambito

    Originariamente inviato da andbin
    Il file l'ho visto. È scomodo da leggere visivamente perché è tutto su una unica riga! Ma è abbastanza normale farlo così se è generato programmaticamente.
    si il file viene generato programmaticamente, c'è una applicazione java ke terminata la sua esecuzione genera appunto questo file xml.Se lo apri con il browser però è più leggibile o no??io lo apro con firefox ed è di più facile lettura.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da jin85
    (quella Dom è sconsigliata xkè il documento è troppo grande).
    DOM è ottimale quando:
    - devi poter "tornare" indietro su nodi parenti, in generale quando c'è bisogno di poter accedere in modo "casuale" ai nodi.
    - devi poter muoverti tra nodi fratelli (siblings), cioè allo stesso livello.

    Con SAX/StAX non puoi fare queste cose. La lettura del documento è sequenziale e quando si arriva ad un nodo "foglia" (che non ha figli) si continua ritornando indietro prendendo i vari tag di chiusura. Insomma ... si segue la struttura e l'annidamento degli elementi.

    Originariamente inviato da jin85
    Mi spiegheresti meglio questo concetto??ho capito ke StAX nn ha una sua struttura..ma parser pull ad esempio ke significa??
    Mettiamola così: SAX è "push" mentre StAX è "pull".
    Per "push" si intende che è il parser che "spinge" i dati verso l'applicazione. Infatti in SAX tu passi al parser un oggetto che implementa certe determinate interfacce e il parser invoca i metodi dell'oggetto ogni volta che incontra qualcosa (inizio di un tag, fine di un tag, ecc....). È il parser che chiama la applicazione man mano che si procede nel parsing del documento.

    In StAX è il contrario, è "pull". È l'applicazione che "tira fuori" dal parser i dati. L'applicazione ha un oggetto (XMLStreamReader) su cui invoca continuamente (in un loop) un metodo next() che estrae un valore (un int) che indica il tipo di evento incontrato. A seconda dell'evento, l'applicazione chiama altri metodi specifici per ottenere le informazioni sull'elemento.

    In SAX/StAX non si hanno informazioni circa il livello di annidamento o la "storia" degli elementi. È comunque sempre l'applicazione che deve "ricordarsi" ciò che ha incontrato e a quale livello.

    Originariamente inviato da jin85
    xkè dici che dovrei usare una JTree,JList ??caso mai dopo con paint ti faccio uno schizzo dell'interfaccia ke avevo pensato.
    Beh, dipende da come vuoi farla.

    Originariamente inviato da jin85
    mi faresti un esempio pratico di queste classi che modellano la struttura??xkè nn ho capito bene cosa vuoi intendere.
    Intendo dire che dovresti avere classi del tipo:

    codice:
    class SchedulazioneRaggruppamento {
        private String nome;
        private String codice;
        private ArrayList<UnitaOperativa> unitaOperative;
     .....
    }
    
    class UnitaOperativa {
        private String codice;
        private ArrayList<Medico> medici;
     .....
    }
    È solo un esempio abbozzato.

    Originariamente inviato da jin85
    che vuoi dire con ottenere al volo??scusami se insisto..ma è la prima volta ke mi trovo in quest'ambito
    L'ho spiegato (spero) un pochino sopra.

    Originariamente inviato da jin85
    si il file viene generato programmaticamente, c'è una applicazione java ke terminata la sua esecuzione genera appunto questo file xml.Se lo apri con il browser però è più leggibile o no??io lo apro con firefox ed è di più facile lettura.
    Sì è vero
    Non sono abituato a leggere file XML con i browser ma in effetti IE/FF sono in grado di visualizzare la struttura ad albero in modo decente (e comprensibile).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    Allora andbin eccomi di nuovo qui..ho fatto un pò di screen con il paint...così riesco a spiegarti meglio il mio problema... scusami se ti rompo..ma ho bisogno di consigli di gente più esperta di me in questo campo (è la prima volta ke mi cimento con l'xml e con il parser di un documento xml).Quindi ti comincio a spiegare un pò come è strutturato quel file xml che ti ho postatoraticamente in testa c'è il raggruppamento per il quale si sta effettuando la schedulazione dei turni (dato che un ospedale può avere più raggruppamenti), subito dopo c'è l'unità operativa considerata (un raggruppamento può contenere diverse unità operative), poi si comincia con i vari medici a cui assegnare i turni (il primo medico considerato è il medico con codice 1111), per questo medico viene indicato per ogni giorno del mese se è presente o assente.Nel caso è presente viene indicato se effettua un turno (e la tipologia del turno), oppure se effettua la reperibilità.Nel caso in cui quel medico è assente per quel determinato giorno, viene segnalato con l'opportuno tag e inoltre viene descritta la causa dell'assenza.Fatta una panoramica generale del documento xml, passiamo ora all'atto pratico e a ciò ke dovrei sviluppare.Prendiamo per esempio il seguente frammento da quel documento xml:

    <SchedulazioneRaggruppamento Nome="A" Codice="11" DataInizio="1/5/2005" DataFine="31/5/2005">
    <UnitàOperativa Codice="111">
    <Medico Codice="1111">
    <Presente Data="2/5/2005">
    <Turno>Pomeriggio</Turno>
    <TipologiaTurno>Turno di Pomeriggio</TipologiaTurno>
    <Reperibilità/>
    </Presente>

    Fatto questo ti pongo alcune domande/esempi per capire meglio (in tutti questi esempi che ti pongo dovrei sempre usare java con tecnologia StAX):

    1)Supponiamo che io ad esempio voglia cambiare l'attributo che è dentro il tag <Turno>, posso farlo ?

    2)Supponiamo che io voglia cambiare la presenza di quel medico per quel giorno, in assenza nello stesso giorno, quindi dovrei eliminare tutto questo frammento dal documento xml:

    <Presente Data="2/5/2005">
    <Turno>Pomeriggio</Turno>
    <TipologiaTurno>Turno di Pomeriggio</TipologiaTurno>
    <Reperibilità/>
    </Presente>

    e sostituirlo con questo :

    <Assente Data="2/5/2005">
    <Causale>Riposo Festivo</Causale>
    </Assente>

    posso farlo?

    3)Naturalmente tutti questi cambiamenti devono avvenire tramite un'interfaccia,poichè devono essere eseguiti da un medico addetto al controllo dei turni (quindi poichè un medico nn capisce nulla nè di computer, nè di xml, si deve avvalere di un'interfaccia ke gli permetta di inserire o modificare i valori ke preferisce nel documento xml).L'interfaccia da me progettata (grosso modo) è questa nelle screen (nn so al momento di quali valori ho bisogno per visitare l'albero del documento xml, quindi magari alcuni passi da me progettati possono pure nn servire).

    Nello screen denominato primo passo faccio inserire al medico il codice dell'unità operativa alla quale appartiene il medico (nn so se serve far inserire al medico questo dato, ho pensato che poichè ci sono diverse unità operative, dovevo specificare il medico di quale unità operativa andavo a modificare), dato l'ok si dovrà aprire la finestra dello screen denominato secondo passo, in questo screen faccio inserire il codice del medico del quale si vuole modificare un turno (visto che ci sono più medici nel documento xml), successivamente cliccando su ok si aprirà la finestra dello screen denominato terzo passo, in questa finestra il medico addetto alla gestione dei turni deve scegliere se inserire un'assenza del medico in questione, oppure una presenza.Supponiamo (seguendo l'esempio fatto nel punto 2) che voglia cambiare la presenza di un medico in assenza, quindi clicca ok in corrispondenza di assenza e si dovrà aprire la finestra nello screen denominato quarto passo-assenza, in questa finestra dovrà inserire la data in cui sarà assente il medico e la causa..inseriti questi dati e premendo ok a livello fisico nel documento xml deve succedere che questo pezzo di codice xml venga eliminato :

    <Presente Data="2/5/2005">
    <Turno>Pomeriggio</Turno>
    <TipologiaTurno>Turno di Pomeriggio</TipologiaTurno>
    <Reperibilità/>
    </Presente>

    per far posto a questo pezzo di codice

    <Assente Data="2/5/2005">
    <Causale>Riposo Festivo</Causale>
    </Assente>

    il quale nel tag assente dovrà contenere la data inserita attraverso l'interfaccia e nel tag causale dovrà contenere la causa inserita attraverso l'interfaccia.

    Questa cosa qui è fattibile tramite java e usando la tecnologia StAX??

    Spero di aver esposto in maniera chiara il mio problema..purtroppo solo voi mi potete aiutare..o suggerire qualcosa..vi ringrazio davvero molto per l'aiuto ke mi state dando.

    screen della mia interfaccia : http://www.zshare.net/download/10644923c831d595/

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da jin85
    1)Supponiamo che io ad esempio voglia cambiare l'attributo che è dentro il tag <Turno>, posso farlo ?

    2)Supponiamo che io voglia cambiare la presenza di quel medico per quel giorno, in assenza nello stesso giorno, quindi dovrei eliminare tutto questo frammento dal documento xml

    posso farlo?
    Sì certo che puoi fare queste cose. Ma la questione principale è che non puoi farle direttamente sul file. Devi caricare i dati in memoria, fare le modifiche e infine riscrivere il file XML.

    Per "caricare in memoria" intendo dire che devi avere una struttura dati in grado di mantenere "integra" la struttura logica del documento XML.
    Se usi DOM ad esempio hai un albero di nodi, quindi potresti andare a cercare i nodi che ti interessano che poi puoi modificare/cancellare come vuoi. È chiaro che con DOM resta "un albero di nodi" e basta.
    Se invece intendi usare una "tua" struttura dati, allora sarà certamente meno generica rispetto all'albero di nodi di DOM ma ti permette di "mappare" bene i dati del documento in oggetti.

    Originariamente inviato da jin85
    Questa cosa qui è fattibile tramite java e usando la tecnologia StAX??
    Ripeto di sì (non lo ripeterò più....). Gli schizzi della tua interfaccia li ho visti. Sono certamente orientati alla gestione di dati specifici richiesti in base a codici o comunque dati inseriti da parte dell'utente. Sono cioè focalizzati alla gestione di singole entità presenti nel documento.

    Per fare una ipotesi, uno potrebbe volere inserire in input il codice di UnitàOperativa ed ottenere una lista di tutti i medici oppure volere inserire in input il codice di un Medico ed ottenere una lista di tutti i giorni di assenza/presenza con relative informazioni sui turni.
    Cose del genere .... è chiaro che la tua interfaccia sarebbe diversa, più complessa e dovrebbe contemplare l'utilizzo di liste e/o tabelle.

    Magari queste cose non ti interessano e se è così, meglio ancora. Ma quello che sto cercando di spiegare è che devi stabilire e valutare tu il livello di "dettaglio" a cui vuoi gestire tutte le informazioni presenti nel documento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    Ok...comincio a capirci qualcosa..ti ringrazio per le tue spiegazioni esaurienti e scusami se a volte sono ripetitivo, ma come ti ho detto considerami come un bambino all'asilo alle prime armi Cmq...

    Originariamente inviato da andbin
    Sì certo che puoi fare queste cose. Ma la questione principale è che non puoi farle direttamente sul file. Devi caricare i dati in memoria, fare le modifiche e infine riscrivere il file XML.

    Per "caricare in memoria" intendo dire che devi avere una struttura dati in grado di mantenere "integra" la struttura logica del documento XML.
    Se usi DOM ad esempio hai un albero di nodi, quindi potresti andare a cercare i nodi che ti interessano che poi puoi modificare/cancellare come vuoi. È chiaro che con DOM resta "un albero di nodi" e basta.
    Se invece intendi usare una "tua" struttura dati, allora sarà certamente meno generica rispetto all'albero di nodi di DOM ma ti permette di "mappare" bene i dati del documento in oggetti.
    ok..quindi da questo punto di vista mi conviene usare DOM, così mi genera lui in automatico una struttura (l'albero di nodi)...perchè altrimenti dovrei costruirmi una mia struttura dati..!!visto ke c'è DOM che la genera in automatico uso quella tecnologia anke xkè magari nel modificare/eliminare qualke elemento può darsi ke mi servirà andare avanti e indietro per la struttura (dato che nn so l'utente quale parte specifica vorrà modificare del documento xml) e quindi mi hai detto ke con DOM si può navigare in entrambi i sensi (nn è sequenziale), mi conviene anke da questo punto di vista..correggimi se mi sbaglio


    Originariamente inviato da andbin
    Ripeto di sì (non lo ripeterò più....). Gli schizzi della tua interfaccia li ho visti. Sono certamente orientati alla gestione di dati specifici richiesti in base a codici o comunque dati inseriti da parte dell'utente. Sono cioè focalizzati alla gestione di singole entità presenti nel documento.

    Per fare una ipotesi, uno potrebbe volere inserire in input il codice di UnitàOperativa ed ottenere una lista di tutti i medici oppure volere inserire in input il codice di un Medico ed ottenere una lista di tutti i giorni di assenza/presenza con relative informazioni sui turni.
    Cose del genere .... è chiaro che la tua interfaccia sarebbe diversa, più complessa e dovrebbe contemplare l'utilizzo di liste e/o tabelle.


    Magari queste cose non ti interessano e se è così, meglio ancora. Ma quello che sto cercando di spiegare è che devi stabilire e valutare tu il livello di "dettaglio" a cui vuoi gestire tutte le informazioni presenti nel documento.
    infatti come giustamente dici queste cose nn sono previste nel mio lavoro (parlo delle cose in neretto) ...io devo solo permettere che l'utente generico possa modificare quel file xml.

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.