Question

Je suis en train de mettre à niveau une application ASP.Net 1.1 jusqu'à .Net 3.5 et l'un des changements que j'ai fait est d'utiliser XslCompiledTransform plutôt que XslTransform. Je courais à travers quelques tests pour XSLT assurer que tout allait bien quand j'ai trouvé un XSLT qui a échoué en utilisant la nouvelle méthode.

Après un peu d'investigation, je trouve que le XSLT avait une énorme xsl: choose déclaration avec 435 conditions, exemple ci-dessous: -

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

.... abrégé par souci de bon sens ......

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

Commentant le xsl ci-dessus. Choisir permet cependant la transformation du travail en laissant actuellement brisaient mon pool d'applications IIS et la seule solution est de redémarrer le pool d'applications

Je réalise un état 435 choisir déclaration est pas une bonne idée pour diverses raisons (j'ai hérité ce code s'il vous plaît ne tenez pas contre moi) et je vais chercher à résoudre ce problème d'une autre manière cependant Je suis intéressé à pourquoi cela a fonctionné précédemment en utilisant XslTransform mais ne pas le XslCompiledTransform. Y at-il quelque chose en particulier besoin I de regarder pour ou est-ce capricieusement grand choix déclaration juste un arrêt.

Était-ce utile?

La solution

Je ne sais pas la raison de ce comportement, mais vous pouvez contourner le problème en utilisant une table de consultation et la fonction 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>

Notez que la fonction document() est désactivée par défaut, vous devez activer en passant un objet XsltSettings à la fonction Load avec EnableDocumentFunction sur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top