XSLT التحليل في .NET
-
29-09-2019 - |
سؤال
النظر في اتباع رمز المقتطف لـ 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>
لا تنتمي إلى StackOverflow