فشل 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