سؤال

النظر في اتباع رمز المقتطف لـ XML.

<rootnode>
    <child id="child1" ><![CDATA[child 1]]></child>
    <child id="child2" ><![CDATA[child 2]]></child>
    <child id="child3" ><![CDATA[child 3]]></child>
    <child id="child4" ><![CDATA[child 4]]></child>
    <child id="child5" ><![CDATA[child 5]]></child>
    <child id="child6" ><![CDATA[child 6]]></child>
    <child id="A1" ><![CDATA[A 1]]></child>
    <child id="A2" ><![CDATA[A 2]]></child>
    <child id="A3" ><![CDATA[A 3]]></child>
    <child id="A4" ><![CDATA[A 4]]></child>
    <child id="A5" ><![CDATA[A 5]]></child>
    <child id="A6" ><![CDATA[A 6]]></child>
</rootnode>

أريد التكرار من خلال كل الطفل الذي لديه معرف مثل "الطفل" باستخدام XSLT.
كيف يمكنني تحقيق ذلك؟

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

المحلول

من الجدير بالتعلم عدم الوصول إلى كل حلقة في XSLT - هذا هو نهج مطابقة قالب لنفس الشيء:

<xsl:template match="/rootnode">
    <xsl:apply-template select="child[starts-with(@id, 'child')]" />
</xsl:template>

<xsl:template match="child">
    <!-- Do stuff -->
</xsl:template>

البت الرئيسي هو استعلام XPath في قوسين مربع - وهو أمر اقترح Ajay_whiz أيضًا حلقة EACH.

نصائح أخرى

سيكون XSLT الخاص بك

<xsl:template match="/rootnode">
    <xsl:for-each select="child">
        <xsl:if test="contains(@id,'child')">
        ... do your stuff here....
        </xsl:if>
    </xsl:for-each>
</xsl:template>

تستطيع ايضا استخذام starts-with وظيفة انظر http://www.w3schools.com/xpath/xpath_functions.aspللحصول على مرجع كامل

للحصول على الكفاءة ، يمكنك تحديد مفتاح واستخدام ذلك على سبيل المثال

<xsl:key name="k1" match="child" use="starts-with(@id, 'child')"/>

<xsl:template match="rootnode">
  <xsl:for-each select="key('k1', true())">
    ...
  </xsl:for-each>
</xsl:template>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top