2010-06-21 8 views
5

Estoy usando XSLT para transformar XML. ¿Hay alguna manera de que el XSLT escuche el XML que lo está alimentando? Algo así como:¿Hay alguna manera de que XSLT resuene el XML que lo alimenta?

<xsl:echo-xml /> 
+1

escupirla a dónde y con qué propósito? ¿Qué hay de ejecutar el XSL en un depurador? –

+0

Buena pregunta (+1). Vea mi respuesta para una serie de posibles soluciones, explicadas en detalle. –

Respuesta

6

Las siguientes copias del XML completa al árbol de resultados:

<xsl:copy-of select="." /> 

Si desea enviar eso a la "salida de mensaje", que sólo puede terminar con esto así:

<xsl:message> 
    <xsl:copy-of select="."/> 
</xsl:message> 
8

Básicamente estoy usando algunos XSLT para transformar XML , ¿hay alguna manera para el XSLT para escupir el XML que está alimentándolo? Algo así como:

La forma más fácil y más corto:

<xsl:copy-of select="/"/> 

Esto muestra el documento XML actual.

<xsl:copy-of select="."/> 

Esto genera el subárbol enraizado por el nodo actual.

Sin embargo, los programadores XSLT utiliza sobre todo la siguiente (regla de identidad):

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

Cuando se trata de la única plantilla en la hoja de estilo, el documento XML completo en el que se aplica la transformación se produce como consecuencia .

El uso de la regla de identidad es uno de los patrones de diseño XSLT más fundamentales. Hace tareas extremadamente sencillas como copiar todos los nodos, pero específicos para los que se realiza un procesamiento específico (como cambiar el nombre, modificar los contenidos, ..., etc.)/

0

Usar una plantilla con la función XPath name() y entidades del soporte de ángulo de salida a los nombres de nodos:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="serialize.xml"?> 
<xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" 
      > 
<xsl:output method="xml" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="no" doctype-system="about:legacy-compat" /> 

<xsl:template match="xsl:stylesheet"> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="/"> 
    <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    </head> 
    <body> 
     <xsl:apply-templates select="*" mode="serialize"/> 
    </body> 
    </html> 
</xsl:template> 

    <xsl:template match="*" mode="serialize"> 
     &lt;<xsl:value-of select="name()" />&gt; 
    <xsl:apply-templates select="*" mode="serialize"/> 
</xsl:template> 
</xsl:stylesheet> 

para más información, Jeni Tennison explica plantillas para copying XML nodes to HTML, así como serializing external XML documents en XSL-Lista

Cuestiones relacionadas