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

    [XSL] aiuto traformazione XSL

    ciao,
    ho un file XML che devo trasformare con XSL in un'altro file XML con una struttura leggermente diversa:
    codice:
    XML1:
    <autoriopere>
            <autore>
    		<nome>Italo</nome>
    		<cognome>Calvino</cognome>
    		<opere>Il visconte dimezzato</opere>
    	</autore>
    	<autore>
    		<nome>Giovanni</nome>
    		<cognome>Verga</cognome>
    		<opere>I miserabili</opere>
    	</autore>
    	<autore>
    		<nome>Giovanni</nome>
    		<cognome>Verga</cognome>
    		<opere>Mastro don gesualdo</opere>
    	</autore>
    	<autore>
    		<nome>Italo</nome>
    		<cognome>Calvino</cognome>
    		<opere>Il cavaliere inesistente</opere>
    	</autore>	
    	<autore>
    		<nome>Italo</nome>
    		<cognome>Calvino</cognome>
    		<opere>Il barone rampante</opere>
    	</autore>	
    </autoriopere>
    
    XML2:
    <autoriopere>
    	<autore>
    		<nome>Italo</nome>
    		<cognome>Calvino</cognome>
    		<opere>Il visconte dimezzato</opere>
    		<opere>Il cavaliere inesistente</opere>
    		<opere>Il barone rampante</opere>
    	</autore>
    	<autore>
    		<nome>Giovanni</nome>
    		<cognome>Verga</cognome>
    		<opere>I miserabili</opere>
                    <opere>Mastro don gesualdo</opere>
    	</autore>	
    </autoriopere>
    BENE, l'ho un po' semplificato per renderlo + comprensibile, in sostanza devo trasformare l'XML1 in XML2: qualcuno ha un'idea ?
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  2. #2
    Io non ci vedo differenze...

    L'unica e' che nel nodo <autore> nel secondo sono esplicitate piu' opere... ma dipende dalla quantita' di dati, non dalla struttura XML. A meno che il tuo non sia un problema di DTD.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  3. #3
    la differenza è che in XML1 il nodo <autore> è ripetuto tante volte quante sono le sue opere, in XML2 il nodo a <opere> è un sottoelemento di autore. puoi ben capire che se volessi trasformare XML1 in html con un xsl vedrei ripetuto autore + volte, mentre trasformando XML2 vedrei autore 1 sola volta e potrei visualizzare magari con un elenco puntato le relative opere correlate subito sotto.

    esempio

    layout HTML di XML1:

    Autore: italo calvino
    Opere: Il cavaliere inesistente

    Autore: italo calvino
    Opere: Il barone rampante

    Autore: italo calvino
    Opere: Il visconte dimezzato

    layout HTML di XML2:

    Autore: italo calvino
    Opere: Il cavaliere inesistente
    Opere: Il barone rampante
    Opere: Il visconte dimezzato
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  4. #4
    Ciao,
    il problema non è di soluzione immediata, tempo fa me l'ero posto anch'io e poi, visto che lavoro con XSLT quasi soltanto per hobby, lo messo tra le cose da approfondire.

    Mi sono chiesto come "come risolveresti la cosa in SQL?" ovviamente con un group by, allora ho cercato in google
    grouping AND xslt

    Ho trovato dei link interessanti, in particolare questo
    http://www.jenitennison.com/xslt/grouping/
    per favore NIENTE PVT TECNICI da sconosciuti

  5. #5
    Non e' facilissimo infatti, non solo perche' con XSL non e' semplice trovare un valore e usarlo come variabile, ma anche perche' la struttura non e' proprio da XML

    Piu' raggruppi i nodi, piu' e' facile accedervi:

    <autore nome="" cognome="">
    <opere>
    <titolo></titolo>
    <titolo></titolo>
    </opere>
    </autore>


    e' ad esempio una struttura preferibile nel II caso.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  6. #6
    se è difficile mi intriga ancor +
    per trasparenza ma anche per rendervi più partecipi:il problema è sorto perchè sto utilizzando (a scopo scolastico) la servlet cocoon e tomcat. per chi non la conoscesse permette di pigliare dei dati da un db e restituirli in xml, le istruzioni sql vanno inserite all'interno di appositi tag nelle pagine XSP. è molto comodo perchè non si scrive 1 riga di codice di proprio pugno.
    l'inconveniente è appunto che (non scrivendo 1 sola riga di codice java e utilizzando le sole potenzialità della servlet cocoon) se faccio una join tra 2 tabelle (autori opere) cocoon mi retituisce l'xml così come lo vede nel risultato della query, quindi con gli autori ripetuti.
    intanto grazie per il vostro interessamento, con calma cercherò di trovare la soluzione

    PS: concettualmente mettendo group by nella query non credo si risolva il problema anche se non ho ancora provato, ma il prof me l'avrebbe detto chiaramente.
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  7. #7
    Originariamente inviato da max161

    PS: concettualmente mettendo group by nella query non credo si risolva il problema anche se non ho ancora provato, ma il prof me l'avrebbe detto chiaramente.
    magari con "group by" no, ma quando il risultato è frutto di una JOIN può essere che cocoon in XML raggruppi i risultati che si ritrovano la chiave utilizzata per la JOIN uguale

    Es.
    SELECT autori.nome, autori.cognome, opere.nome_opera
    FROM autori INNER JOIN opere ON autori.id_autore=opere.id_autore

    PEAR::sql2xml di PHP, che di sicuro non è raffinato quanto coocoon, ti fornisce i risultati raggruppati
    per favore NIENTE PVT TECNICI da sconosciuti

  8. #8
    INNER JOIN fornisce i risultati aggregati per definizione. Se puoi risolvere la cosa con SQL non perdere tempo con XSLT.

    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  9. #9
    Originariamente inviato da Mutato
    INNER JOIN fornisce i risultati aggregati per definizione. Se puoi risolvere la cosa con SQL non perdere tempo con XSLT.


    ho provato con inner join ed è come pensavo, il risultato fornito è il seguente:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <radice xmlns:xsp="http://apache.org/xsp" xmlns:xspdoc="http://apache.org/cocoon/XSPDoc/v1" xmlns:esql="http://apache.org/cocoon/SQL/v2" xmlns:xsp-request="http://apache.org/xsp/request/2.0">               
    	<istanza>
    		<idautore>2</idautore>
    		<nome>Giovanni</nome>
    		<cognome>Verga</cognome>
    		<idopera>1</idopera>
    		<titolo>I miserabili</titolo>
    		<idautore>2</idautore>
    	</istanza>
    	<istanza>
    		<idautore>2</idautore>
    		<nome>Giovanni</nome>
    		<cognome>Verga</cognome>
    		<idopera>2</idopera>
    		<titolo>Mastro don gesualdo</titolo>
    		<idautore>2</idautore>
    	</istanza>
    	<istanza>
    		<idautore>3</idautore>
    		<nome>Italo</nome>
    		<cognome>Calvino</cognome>
    		<idopera>3</idopera>
    		<titolo>Il visconte dimezzato</titolo>
    		<idautore>3</idautore>
    	</istanza>
    	<istanza>
    		<idautore>3</idautore>
    		<nome>Italo</nome>
    		<cognome>Calvino</cognome>
    		<idopera>4</idopera>
    		<titolo>Il barone rampante</titolo>
    		<idautore>3</idautore>
    	</istanza>
    </radice>
    ci sono 2 modi per risolvere il problema:
    1) con java (vorrei evitarlo per utilizzare la servlet "pulita")
    2) XSLT
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  10. #10
    Allora devo dire

    PEAR::sql2xml 1
    Cocoon 0

    Sicuro che non ci sia un qualche parametro da impostare?
    per favore NIENTE PVT TECNICI da sconosciuti

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 © 2026 vBulletin Solutions, Inc. All rights reserved.