2

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を使用して、「child」のようなIDを持つすべての子を反復処理したいと思います。
どうすればこれを達成できますか?

4

3 に答える 3

3

XSLTのforeachループに到達するだけでなく、学ぶ価値があります。これは、同じことに対するテンプレートマッチングアプローチです。

<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がfor-eachループに対しても提案したものです。

于 2010-08-17T07:58:52.433 に答える
0

あなたの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を参照してください。

于 2010-08-17T06:56:17.057 に答える
0

効率を上げるために、キーを定義してそれを使用することができます。

<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>
于 2010-08-17T10:20:55.017 に答える