Pregunta

Sólo estoy en el proceso de actualización de una aplicación ASP.Net 1.1 hasta 3.5 .Net y uno de los cambios que he hecho es utilizar XslCompiledTransform en lugar de XslTransform. Yo estaba corriendo a través de algunos XSLT prueba para asegurarse de que todo estaba bien cuando me encontré con un XSLT que falló con el nuevo método.

Después de un poco de investigación he encontrado que el XSLT tenía una enorme xsl: choose declaración con 435 condiciones, muestra a continuación: -

<xsl:choose>
<xsl:when test=".='0'">Not Applicable</xsl:when>
<xsl:when test=".='A01'">Hartlepool</xsl:when>
<xsl:when test=".='A02'">North Tees</xsl:when>

.... abreviado por el bien de la cordura ......

<xsl:when test=".='ZE0'">Eastern Board</xsl:when>
<xsl:when test=".='ZN0'">Northern Board</xsl:when>
<xsl:when test=".='ZS0'">Southern Board</xsl:when>
<xsl:when test=".='ZW0'">Western Board</xsl:when>
<xsl:otherwise>N/A</xsl:otherwise>
</xsl:choose>

Al comentar el XSL anterior:. Elegir permite la transformación de trabajar sin embargo dejándolo en la actualidad está fallando Mi grupo de aplicaciones de IIS y la única solución es reiniciar el grupo de aplicaciones

Me di cuenta de una condición 435 elegir declaración no es una gran idea para una variedad de razones (heredé este código, no lo sujete contra mí) y voy a mirar a la solución de este problema particular de otra manera, sin embargo me interesa de por qué esto funcionó previamente usando XslTransform pero no lo hace con el XslCompiledTransform. ¿Hay algo en particular, necesitan que a tener en cuenta o se trata de elegir la traen gran declaración que acaba de un.

¿Fue útil?

Solución

No sé la razón de este comportamiento, pero se puede evitar el problema mediante el uso de una tabla de búsqueda y la función document():

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

  <xsl:variable name="table">
    <table>
      <item id="0">Not applicable</item>
      <item id="A01">Hartlepool</item>
      <item id="A02">North Tees</item>
    </table>
  </xsl:variable>

  <xsl:template match="test">
    <test>
      <xsl:value-of select="document('')//table/*[@id=current()][1]"/>
    </test>
  </xsl:template>
</xsl:stylesheet>

Tenga en cuenta que la función document() está desactivado por defecto, usted tiene que permitir que al pasar un objeto a la función XsltSettings Load con EnableDocumentFunction sucesivamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top