2010-05-01 16 views
6

È possibile utilizzare XSLT per trasformare XML in qualcosa di diverso da XML?XSLT: trasformazione in contenuto non-xml?

ad es. voglio la finale contenuti non XML:

<Content> 
    <image url="file1.png"> 
    <image url="file2.png"> 
    ... 
    <image url="filen.png"> 
<EndContent> 

Non Sei preavviso questo documento non è XML (o anche html), ma ha <elements>.

E 'possibile, utilizzando XSLT, generare output non xml?


Un altro esempio di uscita non XML potrebbe essere:

<HTML> 
<BODY> 
    <IMG src="file1.png"><BR> 
    <IMG src="file2.png"><BR> 
    ... 
    <IMG src="filen.png"><BR> 
</BODY> 
</HTML> 

Noterete questo documento è HTML, perché in HTML IMG e BR tag sono proibito da avere una chiusura etichetta. Questo costruisce con xhtml, la riformulazione dell'HTML usando xml, in cui tutti gli elementi sono richiesti dall'avere un tag di chiusura (perché in xml ogni tag deve essere chiuso).


Un altro esempio di uscita non XML potrebbe essere:

INSERT INTO Documents (Filename) VALUES ('file1.png') 
INSERT INTO Documents (Filename) VALUES ('file2.png') 
... 
INSERT INTO Documents (Filename) VALUES ('file3.png') 

posso fare qualsiasi sorgente XML mi piace, ma un esempio potrebbe essere:

xml Fonte:

<DocumentStore> 
    <Document type="image">file1.png</Document> 
    <Document type="image">file2.png</Document> 
    <Document type="image">filen.png</Document> 
</DocumentStore>  

Oppure:

<Profiles> 
    <User avatar="file1.png" /> 
    <User avatar="file2.png" /> 
    <User avatar="filen.png" /> 
</Profiles> 
+0

Cosa c'è di sbagliato con '' e ''
? – kennytm

+0

@KennyTM: HTML non consente la chiusura dei tag su IMG e BR. Non è che i tag di chiusura siano offensivi. È solo che l'HTML corretto non li avrà. –

risposta

1

Sì, è possibile, utilizzando l'elemento xsl:output nel foglio di stile.

8

È possibile utilizzare <xsl:output> per specificare il formato di output, che non deve essere xml, vedere this reference page.

Tuttavia, se si è l'output HTML, nessun browser moderno dovrebbe lamentarsi anche se si fa mettere i tag di chiusura, in modo da utilizzare il vostro esempio di cui sopra, credo che tutti i browser dovrebbe essere ok con: -

<HTML> 
<BODY> 
    <IMG src="file1.png"></IMG><BR></BR> 
    <IMG src="file2.png"></IMG><BR></BR> 
    ... 
    <IMG src="filen.png"></IMG><BR></BR> 
</BODY> 
</HTML> 

Così Non sono sicuro del perché non vuoi inserire il tag di chiusura, a meno che non mi manchi qualcosa.


Aggiornamento: Aggiunto esempio di output non XML

Dato questo foglio di stile: -

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/filenames"> 

    <xsl:for-each select="filename"> 
    INSERT INTO Documents (Filename) VALUES ('<xsl:value-of select="." />') 
    </xsl:for-each> 

    </xsl:template> 
</xsl:stylesheet> 

e questo XML di input: -

<?xml version="1.0" encoding="UTF-8"?> 
<filenames> 
    <filename>file1.png</filename> 
    <filename>file2.png</filename> 
    <filename>file3.png</filename> 
</filenames> 

È possibile ottenere output come questo: -

INSERT INTO Documents (Filename) VALUES ('file1.png') 

INSERT INTO Documents (Filename) VALUES ('file2.png') 

INSERT INTO Documents (Filename) VALUES ('file3.png') 
+0

@Alan Chan: Non si tratta tanto di generare HTML non validi che i browser potrebbero essere in grado di gestire; sta generando HTML valido in modo che i parser possano gestirlo. –

+0

@Ian: ok capisco. Bene, se usi per specificare che l'output è html, e quindi usi per creare i tag html ... ad es. file1.png allora il processore xslt dovrebbe produrre i tag ,
, ecc., senza il tag di chiusura come richiesto per html. –

4

Non importa come si creano i tag IMG,

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html"/> 
<xsl:template match="/"> 
<HTML> 
<BODY> 
    <xsl:element name="IMG"> 
    <xsl:attribute name="src">file1.png</xsl:attribute> 
    </xsl:element> 
    <IMG src="file2.png"></IMG> 
    <IMG src="filen.png"/> 
</BODY> 
</HTML> 
</xsl:template> 
</xsl:stylesheet> 

Il Metodo di uscita "html" farà sì che i tag IMG non da chiudere.

<HTML> 
<BODY><IMG src="file1.png"><IMG src="file2.png"><IMG src="filen.png"></BODY> 
</HTML> 
+0

Quando riproduco questo, i tag di chiusura sono inclusi. Allo stesso tempo, a volte potrei voler includere tag di chiusura opzionali e talvolta potrei non volerlo. XSLT deve essere in grado di trasformare xml nel mio formato di output ** desiderato **. –