質問

私はASP.NET 1.1アプリケーションを.NET 3.5までアップグレードする過程にあり、私が行った変更の1つは、XSLTransformではなくXSLCompiledTransformを使用することです。新しい方法を使用して失敗したXSLTを見つけたときに、すべてがうまくいくことを確認するために、いくつかのテストXSLTを実行していました。

少しの調査の後、XSLTには巨大なXSLがあることがわかりました。435条件でステートメントを選択します。

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

....正気のために略された......

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

上記のXSLにコメントする:選択することで変換を機能させることを許可しますが、それを去ることは現在私のIISアプリケーションプールをクラッシュさせており、唯一のソリューションはアプリプールを再起動することです。

435の条件を選択したステートメントは、さまざまな理由で素晴らしいアイデアではありません(このコードを継承しました(私に対してそれを保持しないでください)。これが以前にxsltransformを使用して機能したが、xslcompiledtransformを使用していない理由について興味があります。特に私は注意する必要があるものはありますか、それともこの奇妙に大きな選択されたステートメントが1つだけです。

役に立ちましたか?

解決

この動作の理由はわかりませんが、ルックアップテーブルと 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>

に注意してください document() 機能はデフォルトで無効になっています。 XsltSettings にオブジェクトします Load で機能します EnableDocumentFunction の上。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top