XSlCompileDtransform对于许多XSL而言XSLT失败:
-
04-10-2019 - |
题
我只是在将ASP.NET 1.1应用程序升级到.NET 3.5的过程中,而我所做的更改之一就是使用XSlCompileDtransForm而不是XSLTransForm。当我发现使用新方法失败的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一起使用。我需要注意的是特别的东西,还是这个奇特的大型选择陈述只有一个。
解决方案
我不知道这种行为的原因,但是您可以使用查找表和 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
在。
不隶属于 StackOverflow