التحقق من قيمة متغير داخل متغير أسبقية أعلى في XSLT

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

  •  03-07-2019
  •  | 
  •  

سؤال

أحتاج إلى أن أكون قادرًا على التحقق من القيمة "الحالية" للمتغير داخل إعادة تعريف نفس المتغير في ملف xslt مختلف يتضمن المتغير الآخر.

الرئيسية.xslt:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:import href="other.xslt"/>
    <xsl:variable name="email">
        <xsl:if test="string-length($email) = 0">
            bar@foo.com
        </xsl:if>
    </xsl:variable>
    <xsl:template match="/">
        <Email>
            <xsl:value-of select="$email"/>
        </Email>
    </xsl:template>
</xsl:stylesheet>

أخرى.xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:variable name="email">foo@bar.com</xsl:variable>
</xsl:stylesheet>

ما أود القيام به هو أن أكون قادرًا على التحقق من قيمة متغير الأسبقية الأدنى لمعرفة ما إذا كنت بحاجة إلى الكتابة فوقه في المتغير الموجود في xslt الحالي.(إخلاء المسؤولية - يتعطل الكود الحالي بشدة)

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

المحلول

كما لاحظ آخرون، لا يمكن إضافة افتراضي إلى متغير عام تم تعريفه في ورقة أنماط مستوردة باستخدام نفس اسم المتغير.وذلك لأن المتغير الذي يحمل هذا الاسم المحدد في ورقة أنماط xslt الحالية له أسبقية أعلى من ذلك الموجود في ورقة الأنماط المستوردة وسيتم استخدام الأول فقط (لا يمكنك الوصول إلى المتغير المسمى بشكل مماثل في ورقة الأنماط ذات الأسبقية الأقل).

هنا كيف يمكن للمرء إضافة الافتراضي:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--                                            -->
  <xsl:import href="other.xsl"/> 
<!--                                            -->
    <xsl:variable name="vMyEmail" select=
     "concat(substring('bar@foo.com', 1 div not($vEmail)), $vEmail)"
     />
<!--                                            -->
    <xsl:template match="/">
      <xsl:value-of select="$vMyEmail"/>
    </xsl:template>
</xsl:stylesheet>

القيام مذكرة أن المتغير العالمي $vMyEmail يتم تعريفه بطريقة تحتوي على قيمة المتغير $vEmail (محددة في ورقة الأنماط المستوردة) إذا كانت هذه سلسلة بطول 1 على الأقل، أو القيمة الافتراضية المطلوبة - وإلا.

باستخدام هذه التقنية، سيتم استخدام ما تم تحديده $vMyEmail في أي مكان بعد تعريفه.ال $vEmail لن يتم استخدام المتغير من ورقة الأنماط المستوردة مباشرةً على الإطلاق.

نصائح أخرى

وأنت لا تستطيع أن تفعل ما تريد مباشرة، وكنت قد لتعيين متغير الثاني.

ولكن لا أستطيع أن أفهم القصد: إذا كان هذا القالب على أساس أنك يمكن أن توفر قيمة افتراضية إلى أي المعلمة (التي تعمل بطريقة مماثلة جدا لالمتغيرات). الطريقة التي العبارة تشير إلى أن السؤال الذي هو النهج الصحيح بالنسبة لي، ولكن يمكنك توضيح مدى ارتباط هذه القوالب وتستخدم؟

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