特定のノード値の最初の出現に一致させたいのですが、困惑しています。
私は試し<xsl:when test="root/content/contentType = root/content/contentType[.='generic'][1]">
ましたが、すべての出来事に一致します。<xsl:when test="root/content/contentType[.='generic'][1]">
最後に、以下の出力HTMLを作成します。最初のアイテムにはヘッダーがありますが、すべてのアイテムには同じ値のクラスがあります。
これが私のXMLです。
どんなアイデアでも大歓迎です。
XML:
<root>
<content>
<contentType>ingredients</contentType>
<listItems>
<item>Item 1</item>
<item>Item 2</item>
</listItems>
</content>
<content>
<contentType>generic</contentType>
<listItems>
<item>Item 1</item>
<item>Item 2</item>
</listItems>
</content>
<content>
<contentType>generic</contentType>
<listItems>
<item>Item 1</item>
<item>Item 2</item>
</listItems>
</content>
<content>
<contentType>ingredients</contentType>
<listItems>
<item>Item 1</item>
<item>Item 2</item>
</listItems>
</content>
<content>
<contentType>directions</contentType>
<listItems>
<item>Item 1</item>
<item>Item 2</item>
</listItems>
</content>
</root>
必要な出力:
<div class="ingredients">
<h2>Ingredients</h2>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
<div class="generic">
<h2>Generic</h2>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
<div class="generic">
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
<div class="ingredients">
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
<div class="directions">
<h2>Directions</h2>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
編集:
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<xsl:for-each select="root/content">
<div>
<xsl:attribute name="class"><xsl:value-of select="./contentType"/></xsl:attribute>
<xsl:choose>
<xsl:when test="./contentType[.='ingredients'][1]">
<h2><xsl:value-of select="./contentType"/></h2>
</xsl:when>
<xsl:when test="./contentType[.='generic'][1]">
<h2><xsl:value-of select="./contentType"/></h2>
</xsl:when>
<xsl:when test="./contentType[.='directions'][1]">
<h2><xsl:value-of select="./contentType"/></h2>
</xsl:when>
</xsl:choose>
<ul>
<xsl:for-each select="listItems/item">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</div>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>