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

在您的 for-each 中,您现在正在循环<cta>使用任何匹配的所有子节点/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 回答