2010-05-01 9 views
6

¿Es posible usar XSLT para transformar XML en algo que no sea XML?XSLT: ¿Transformando en contenido no xml?

p. Ej. Quiero que el contenido final no XML:

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

Usted es el aviso de este documento no es XML (o incluso HTML), pero tiene <elements>.

¿Es posible, usando XSLT, generar una salida que no sea xml?


Otro ejemplo de la salida no XML podría ser:

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

Se dará cuenta de este documento es HTML, porque en HTML y IMGBR etiquetas son prohibido de tener un cierre etiqueta. Este contrastes con XHTML, la reformulación de HTML usando XML, donde se requieren todos los elementos de tener una etiqueta de cierre (ya que en xml cada etiqueta debe estar cerrada).


Otro ejemplo de la salida no XML podría ser:

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

Puedo hacer cualquier xml fuente me gusta, pero un ejemplo podría ser:

Fuente xml:

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

O tal vez:

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

¿Qué pasa con '' y '
'? – kennytm

+0

@KennyTM: HTML prohíbe el cierre de etiquetas en IMG y BR. No es que las etiquetas de cierre sean ofensivas. Es solo que el HTML correcto no los tendrá. –

Respuesta

1

Sí, puede hacerlo, utilizando el elemento xsl:output en su hoja de estilo.

8

Puede usar <xsl:output> para especificar el formato de salida, que no tiene que ser xml, consulte this reference page.

Sin embargo, si usted está dando salida html, no hay ningún navegador moderno debe quejarse incluso si lo hace poner las etiquetas de cierre, por lo que la utilización de su ejemplo anterior, creo que todos navegador debe estar bien 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> 

Así No estoy muy seguro de por qué no quieres poner la etiqueta de cierre, a menos que me falta algo.


Actualización: Agregado ejemplo de producción no xml

Dada esta hoja de estilo: -

<?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> 

y esto xml de entrada: -

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

Se obtiene una salida como esto: -

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

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

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

@Alan Chan: no es tanto generar HTML no válido que los navegadores pueden ser capaces de manejar; está generando HTML válido para que los analizadores puedan manejarlo. –

+0

@Ian: vale, ya veo. Bien, si usa para especificar que el resultado es html, y luego use para crear las etiquetas html ... p. Ej. archivo1.png luego el procesador xslt debe generar las etiquetas ,
, etc. sin la etiqueta de cierre como se requiere para html. –

4

No importa cómo crear sus etiquetas 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> 

El método de "HTML" de salida hará que las etiquetas IMG no se cierre.

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

Cuando reproduzco esto, las etiquetas de cierre están incluidas. Al mismo tiempo, a veces es posible que desee incluir etiquetas de cierre opcionales, y a veces puede que no desee. XSLT necesita poder transformar xml en mi ** formato de salida ** deseado. –