Frage

Ich bin gerade dabei, eine ASP.Net 1.1-Anwendung ein Upgrade bis zu .Net 3.5 und eine der Änderungen, die ich gemacht habe, ist XslCompiledTransform zu verwenden, anstatt XslTransform. Ich war durch einige Test XSLTs läuft alles gut, um sicherzustellen, war, als ich ein XSLT gefunden, die die neue Methode fehlgeschlagen verwendet wird.

Nach einem bisschen Untersuchung fand ich, dass der XSLT eine riesige xsl hatte: wählen Aussage mit 435 Bedingungen, Probe unter: -

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

.... aus Gründen der Vernunft abgekürzt ......

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

die oben xsl Kommentar aus. Wählen Sie ermöglicht die Umwandlung in Arbeit verlassen sie jedoch in derzeit meine IIS-Anwendungspool und die einzige Lösung Absturz ist die App-Pool neu zu starten

Ich weiß, eine 435 Bedingung wählen Aussage ist keine gute Idee, für eine Vielzahl von Gründen (geerbt ich diesen Code Bitte halten Sie es nicht gegen mich) und ich werde bei der Lösung dieses besondere Problem auf eine andere Weise suchen aber ich bin daran interessiert, warum dies bisher XslTransform gearbeitet verwenden, aber nicht mit dem XslCompiledTransform. Gibt es etwas Bestimmtes ich Notwendigkeit zu achten ist, oder ist dies freakishly große Aussage nur eine einmalige Auswahl.

War es hilfreich?

Lösung

Ich weiß nicht, den Grund für dieses Verhalten, aber man kann das Problem umgehen, indem Sie eine Lookup-Tabelle verwenden und die document() Funktion:

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

Beachten Sie, dass die document() Funktion standardmäßig deaktiviert ist, müssen Sie es aktivieren, indem Sie auf ein XsltSettings Objekt in der Load Funktion mit EnableDocumentFunction vorbei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top