-1

こんにちは、初心者です。質問に答えていただけると助かります。

私のXMLを検討してください

<A>
<B>
 <b1>a</b1>
 <b2>b</b2>
</B>
<C>
 <c1>a</c1>
 <c2>b</c2>
</C>
</A>.

XSLT では、ノード B と C のサブ子の数を調べる必要があります。B に 2 つの子がある場合、XSLT は #1 a と #2 b を動的に出力します。同様に、n 個の子がある場合 #1 の値、#2 の値 .......... #n の値。これを解決するのを手伝ってください。上記の条件の XSLT 設計コードが必要です。

4

1 に答える 1

0

要素の値を「動的に」出力し、子の「番号」をプレフィックスとして使用するには、使用できますxsl:value-of select="position()"/>

出力がテキスト(xmlではなく)であると仮定すると、これを試してください:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="*"  mode ="printChildNr" >
        <!-- children of B or C-->
        <xsl:text>children of </xsl:text>
        <xsl:value-of select="name()"/>
        <xsl:text>:&#10; </xsl:text>
        <xsl:for-each select="*" >
            <xsl:text>#</xsl:text>
            <xsl:value-of select="position()"/>
            <xsl:text> </xsl:text>
            <!-- text content of child-->
            <xsl:value-of select="text()"/>
            <xsl:text>&#10;</xsl:text>
        </xsl:for-each>
    </xsl:template>

    <xsl:template match="/*" >
        <xsl:apply-templates select="B | C"  mode="printChildNr"/>
    </xsl:template>
</xsl:stylesheet>

これmode="printChildNr"は必須ではありませんが、xlt を拡張する必要がある場合に役立ちます。

入力:

<?xml version="1.0" encoding="utf-8" ?>
<A>
    <B>
        <b1>a</b1>
        <b2>b</b2>
    </B>
    <C>
        <c1>a</c1>
        <c2>b</c2>
        <c3>b</c3>
    </C>
</A>

出力:

 children of B:
 #1 a
 #2 b
 children of C:
 #1 a
 #2 b
 #3 b
于 2013-05-24T08:10:03.323 に答える