¿Por qué el ex salidas de código de texto, ¿por qué debería insistir XSL para ignorar todos los demás texto? es que el comportamiento de todos los analizadores XML o solamente de mi propia
Están descubriendo una de las características más fundamentales XSLT como se especifica en el pliego de condiciones: la built-in templates of XSLT.
De the Spec:
Hay una regla integrada de plantilla para permitir el procesamiento recursivo para continuar en ausencia de un exitoso ajuste de patrones por una regla de plantilla explícita en la hoja de estilo. Esta regla de plantilla se aplica a los nodos de elemento y al nodo raíz . Lo siguiente muestra la equivalente de la plantilla integrada regla:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
También hay una regla plantilla incorporada para cada modo, que permite recursiva procesamiento para continuar en la misma modo en el ausencia de una coincidencia de patrón exitosa mediante una plantilla explícita regla en la hoja de estilo. Esta regla de plantilla se aplica a ambos nodos de elementos y al nodo raíz . A continuación, se muestra el equivalente de la regla de plantilla incorporada para el modo m.
<xsl:template match="*|/" mode="m">
<xsl:apply-templates mode="m"/>
</xsl:template>
También hay una regla de plantilla incorporada para el texto y los nodos de atributo que copias de texto a través de:
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>
La regla integrada de plantilla para instrucciones de elaboración y comentarios consiste en hacer nada.
<xsl:template match="processing-instruction()|comment()"/>
La regla plantilla incorporada para nodos espacio de nombres es también no hacer nada. No hay ningún patrón que pueda coincidir con un nodo de espacio de nombres ; por lo tanto, la regla de plantilla incorporada es la única regla de plantilla que se aplica para los nodos de espacio de nombres .
Las reglas plantilla incorporadas se tratados como si fueran importados implícitamente antes de la hoja de estilo y por lo que tienen menor prioridad que la importación todas las demás reglas de plantilla. Por lo tanto, el autor puede anular una regla de plantilla incorporada al incluir una regla de plantilla explícita.
Por lo tanto, el comportamiento informado es el resultado de la aplicación de las plantillas incorporadas: la 1ra y la 2da de las tres.
Es un buen patrón de diseño XSLT para anular las plantillas incorporadas con su propia que emitirá un mensaje de error cada vez que llama para que el programador sabe de inmediato su transformación se "fuga":
Para ejemplo, si existe este documento XML:
<a>
<b>
<c>Don't want to see this</c>
</b>
</a>
y se procesa con esta transformación:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="a|b">
<xsl:copy>
<xsl:attribute name="name">
<xsl:value-of select="name()"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
el resultado es:
<a name="a">
<b name="b">Don't want to see this</b>
</a>
y el programador se verá muy confusa cómo apareció el texto deseado.
Sin embargo, sólo la adición de este catch-all template
ayuda a evitar cualquier confusión y captura tales errores inmediatamente:
<xsl:template match="*">
<xsl:message terminate="no">
WARNING: Unmatched element: <xsl:value-of select="name()"/>
</xsl:message>
<xsl:apply-templates/>
</xsl:template>
Ahora, además de la salida confuso el programador recibe una advertencia que explica el problema de inmediato:
WARNING: Unmatched element: c
+1: Gran explicación: mucho más completa que la respuesta aceptada, aunque la respuesta aceptada también responde a la pregunta específica. –
@donroby: Gracias. ¿Por qué mi respuesta no abordaría la pregunta y la respondería? Cualquiera que tenga este problema y lea mi respuesta comprenderá la causa de su problema y podrá solucionarlo. –
@donroby: Mi respuesta proporciona una respuesta exacta: '" Por lo tanto, el comportamiento informado es el resultado de la aplicación de las plantillas incorporadas - el 2 de los tres "' –