XSLT - Как оценить один узел в нескольких местах - PullRequest
0 голосов
/ 28 сентября 2011

Я создаю ротатор изображений в 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 оценивался внутри #slider, затем пересматривался в #htmlcaption, затем в Узле B и т. Д.

Любая помощь будет принята с благодарностью.

Спасибо!

1 Ответ

2 голосов
/ 29 сентября 2011

Во-первых, вполне возможно оценить исходный элемент несколько раз. Просто используйте тот же селектор.

Например, с учетом следующего 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...