سؤال

أنا جديد تمامًا على XSLT ولا أستطيع معرفة أين أخطأت في الكود التالي.

<xsl:variable name="var" select="boolean('false')"/>

<xsl:if test="$var'">variable is true</xsl:if>

فهو دائمًا ما يعود صحيحًا عندما يُقصد به أن يكون كاذبًا.لماذا؟

هل كانت مفيدة؟

المحلول

قيمة المتغير $var كما هو محدد في:

   <xsl:variable name="var" select="boolean('false')"/>

يكون

   true()

هذا لأنه في XPath "false"هي سلسلة عادية، على عكس false(), ، وهو المنشئ لـ boolean قيمة false()

القيمتان المنطقيتان في XPath هما (لاحظ أنها مبنية!):

   true() و false()

يتم توضيح تفاصيل تحويل أي قيمة إلى قيمة منطقية في الملف مواصفات XPath.:

"ال منطقية تقوم الدالة بتحويل وسيطتها إلى قيمة منطقية كما يلي:

  • الرقم صحيح إذا وفقط إذا لم يكن صفرًا إيجابيًا أو سلبيًا ولا نان

  • مجموعة العقدة صحيحة إذا وفقط إذا كانت غير فارغة

  • السلسلة صحيحة إذا وفقط إذا كان طولها غير صفري

  • يتم تحويل كائن من نوع آخر غير الأنواع الأساسية الأربعة إلى منطقية بطريقة تعتمد على هذا النوع "

في حالتك، السلسلة "خطأ" ليست الرقم 0 ولها طول موجب، لذلك يتم تطبيق القاعدة الموجودة في النقطة الثالثة أعلاه، مما يؤدي إلى true().

لذلك، لتحديد متغير في XSLT 1.0، قيمته false(), ، يحتاج المرء إلى كتابة التعريف على النحو التالي:

   <xsl:variable name="vMyVar" select="false()"/>

أو، إذا كنت لا تتذكر هذا بالضبط، يمكنك دائمًا كتابة:

   <xsl:variable name="vMyVar" select="1 = 0"/>

(حدد أي تعبير يتم تقييمه إلى false()) وسيقوم معالج XSLT بالعمل نيابةً عنك.

في XSLT 2.0، من الأفضل دائمًا تحديد النوع بشكل صريح من المتغير:

   <xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>

نصائح أخرى

الدالة boolean() التي تستخدمها تقوم بالفعل بعملها.لاستخدام قيم الصواب والخطأ الصريحة، يجب عليك استخدام الوظائف التالية:

<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>

فقط لمعلوماتك، لكل وثائق MSDN, ، boolean() يُرجع ما يلي:

  • إذا كانت الوسيطة رقمًا سالبًا أو موجبًا، فسيتم تحويلها إلى القيمة المنطقية الحقيقية.
  • إذا كانت الوسيطة صفرًا أو قيمة NaN، فسيتم تحويلها إلى خطأ.
  • إذا كانت الوسيطة مجموعة عقدة غير فارغة، فسيتم تحويلها إلى صحيح.يتم تحويل مجموعة العقدة الفارغة إلى خطأ.
  • إذا كانت الوسيطة عبارة عن سلسلة غير فارغة، فسيتم تحويلها إلى صحيح.يتم تحويل سلسلة فارغة إلى خطأ.
  • إذا كانت الوسيطة كائنًا من نوع آخر غير الأنواع الأربعة الأساسية، فسيتم تحويلها إلى قيمة منطقية بطريقة تعتمد على هذا النوع.

وA متأخرا بعض الشيء في هذه المرحلة ربما ولكن المنظمة البحرية الدولية التعامل مع القيم المنطقية ليست مجرد يستحق كل هذا الجهد. هيريس كيف تعاملت مع منطقية (إلزامي) يعود من DB:

<xsl:variable name="vTrue" select="true()"/>                     
    <xsl:choose>
      <xsl:when test="string(Mandatory) = string($vTrue)">
        <xsl:text>Mandatory</xsl:text>
      </xsl:when>
      <xsl:otherwise>           
      </xsl:otherwise>
    </xsl:choose>

وآمل أن يساعد هذا شخص

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top