XSLCompileDTransform не удается для XSLT со многими XSL: когда условия

StackOverflow https://stackoverflow.com/questions/2906034

  •  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 на.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top