2011-09-28 55 views
0

我建立在XSLT图像旋转,需要下面的标记在多个地方的单个节点:XSLT - 如何评价

<div class="wrapper"> 
    <div class="overlay"></div> 
    <div id="slider" class="slider"> 
    [IMAGE FROM NODE A GOES HERE] 
    [IMAGE FROM NODE B GOES HERE] 
    ... 
    </div> 
    <div id="htmlcaption" class="html-caption"> 
    [CAPTION FOR NODE A GOES HERE] 
    [CAPTION FOR NODE B GOES HERE] 
    ... 
    </div> 
</div> 

我需要帮助构造XSLT使节点A会进去#评估滑块然后在#htmlcaption中再次评估,然后在Node B中,依此类推。

任何帮助将不胜感激。

谢谢!

+1

没有足够的上下文。节点A和节点B是什么?我假设你显示的代码是所需的输出。输入是什么样的?你已经拥有了哪些XSLT(这不是一个“给我编码”的网站)。 –

回答

2

首先,多次评估源元素是完全可能的。只需使用相同的选择器。

例如,考虑以下XML:

<images> 
    <node id="a" image="foo.png" caption="foo" /> 
    <node id="b" image="bar.png" caption="bar" /> 
</images> 

这个XSLT会从第一个节点重复输出的东西:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="images"> 
    <div id="images"> 
     <img><xsl:value-of select="node[@id='a']/@image"/></img> 
     <img><xsl:value-of select="node[@id='a']/@caption"/></img> 
     <img><xsl:value-of select="node[@id='a']/@image"/></img> 
     <img><xsl:value-of select="node[@id='a']/@caption"/></img> 
    </div> 
</xsl:template> 

输出:

<div id="images"> 
    <img>foo.png</img> 
    <img>foo</img> 
    <img>foo.png</img> 
    <img>foo</img> 
</div> 

但是它看起来像你真正想要的是循环一堆包含图像和标题的节点。 你可以使用一个for-each循环,以避免名称选择的节点:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="images"> 
    <div id="images"> 
     <xsl:for-each select="node"> 
      <img><xsl:value-of select="@image"/></img> 
     </xsl:for-each> 
    </div> 
    <div id="captions"> 
     <xsl:for-each select="node"> 
      <div><xsl:value-of select="@caption"/></div> 
     </xsl:for-each> 
    </div> 
</xsl:template> 

</xsl:stylesheet> 

将产生:

<div id="images"> 
    <img>foo.png</img> 
    <img>bar.png</img> 
</div> 
<div id="captions"> 
    <div>foo</div> 
    <div>bar</div> 
</div> 
+0

这恰好解决了我的问题。我以为我曾尝试过这种方法,但显然不是。我不确定如何重新使用同一个节点。 谢谢! – mindpivot