0

for-eachを使用して子ノードのグループを選択して表示しようとしていますが、行き詰まっています。

XML

<cta>
    <text>Call to action text</text>
    <link>call to action link location</link>
    <alt>call to action alt text</alt>
    <target>_blank</target>
    <style>button blueBut</style>
</cta>
<cta>
    <text>Call to action 2</text>
    <link>call to action 2 link</link>
    <alt>call to action 2 alt text</alt>
    <target>_blank</target>
    <style>button blueBut</style>
</cta>

XSL

<div class="buttonPostLeft">    
    <xsl:for-each select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='Overview']/overview/cta/*">
        <a>
            <xsl:attribute name='class'>
                <xsl:value-of select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='Overview']/overview/cta/style" />
            </xsl:attribute>
            <xsl:attribute name='href'>
                <xsl:value-of select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='Overview']/overview/cta/link" />
            </xsl:attribute>
            <xsl:attribute name='title'>
                <xsl:value-of select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='Overview']/overview/cta/alt" />
            </xsl:attribute>
            <xsl:value-of select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='Overview']/overview/cta/text"/>
        </a>
    </xsl:for-each>
</div>

基本的に、そのグループ属性を持つXMLツリー内のすべてのctaグループに対してアンカータグを繰り返す必要があります。したがって、この例では、DIV内に2つのリンクがあります。それが理にかなっていることを願っています!

4

1 に答える 1

2

<cta>for-eachで、これで、を使用して一致したすべての子ノードをループします。/cta/*

変更する必要があります

/Properties/Data/Datum[@ID='ID1']/DCR[@Type='Overview']/overview/cta/*

の中へ

/Properties/Data/Datum[@ID='ID1']/DCR[@Type='Overview']/overview/cta

また、for-eachループ内に入ると、次のようにドットを使用するだけで、内の要素を一致させることができます。

<xsl:attribute name='class'>
    <xsl:value-of select="./style" />
</xsl:attribute>

そして、すっきりしたものでさえ、次のようになります。

<a class="{./style}" href="{./link}" title="{./alt}">
    <xsl:value-of select="./text"/>
</a>
于 2012-10-24T09:06:51.257 に答える