2011-09-28 16 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> 

を私はノードAが#内で評価になるだろうように、XSLTを構築する助けが必要スライダーを#htmlcaption、Node Bなどで再評価します。

ご協力いただければ幸いです。

ありがとうございます!

+1

が足りませんコンテキスト あなたは名前でノードを選択避けるためにため、各ループを使用することができます。 NODE AとNODE Bは何ですか?私はあなたが示したコードが望ましい出力であると仮定します。入力はどのように見えますか?あなたはすでにXSLTを持っています(SOは "私にはコードをつけてください"というサイトではありません)。 –

答えて

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> 

、それがどのように見えるがあなたが本当に望むのは、画像とキャプションを含むノードの束をループすることです。

生成されます
<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

関連する問題