XSLCompileDTransform не удается для XSLT со многими XSL: когда условия
-
04-10-2019 - |
Вопрос
Я просто в процессе обновления приложения ASP.NET 1.1 до .NET 3.5 и один из изменений, которые я сделал, - это использовать XSLCompileDTransform, а не XSLTransform. Я проходил через несколько тестовых XSLTS, чтобы убедиться, что все хорошо, когда я нашел 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
на.