次のような入力が与えられます:
<p>Some information about the proceeding source listing:</p>
<code language="CSharp"><![CDATA[ ... ]]></code>
<code language="AnotherLanguage"><![CDATA[ ... ]]></code>
<p>This is a different example which perhaps applies to just one language:</p>
<code language="CSharp"><![CDATA[ ... ]]></code>
<p>Another example:</p>
<code language="CSharp"><![CDATA[ ... ]]></code>
<code language="AnotherLanguage"><![CDATA[ ... ]]></code>
<code language="YetAnotherLanguage"><![CDATA[ ... ]]></code>
<code>
XSLT 1.0を使用して、隣接する要素を次のようにグループ化するにはどうすればよいですか。
<p>Some information about the proceeding source listing:</p>
<div class="source-selector">
<ul class="tabs">
<li class="tab" data-language="CSharp">CSharp</li>
<li class="tab" data-language="AnotherLanguage">AnotherLanguage</li>
</ul>
<div data-language="CSharp">
<pre>...</pre>
</div>
<div data-language="AnotherLanguage">
<pre>...</pre>
</div>
</div>
<p>This is a different example which perhaps applies to just one language:</p>
<div class="source-selector">
<ul class="tabs">
<li class="tab" data-language="CSharp">CSharp</li>
</ul>
<div data-language="CSharp">
<pre>...</pre>
</div>
</div>
<p>Another example:</p>
<div class="source-selector">
<ul class="tabs">
<li class="tab" data-language="CSharp">CSharp</li>
<li class="tab" data-language="AnotherLanguage">AnotherLanguage</li>
<li class="tab" data-language="YetAnotherLanguage">YetAnotherLanguage</li>
</ul>
<div data-language="CSharp">
<pre>...</pre>
</div>
<div data-language="AnotherLanguage">
<pre>...</pre>
</div>
<div data-language="YetAnotherLanguage">
<pre>...</pre>
</div>
</div>
これは私が現在持っているものであり、すべてのソースコードが他のすべてのコンテンツ(この例の段落など)の後に1つのセレクターにグループ化されているため、正しく機能しません。
<!-- Display paragraphs first -->
<xsl:apply-templates select="*[not(name() = 'code')]"/>
<!-- Display consecutive source code within selector -->
<div class="source-selector">
<ul class="tabs">
<xsl:for-each select="code">
<li class="tab" data-language="{@language}"><include item="{@language}Label"/></li>
</xsl:for-each>
</ul>
<xsl:for-each select="code">
<div data-language="{@language}">
<pre><xsl:copy-of select="node()"/></pre>
</div>
</xsl:for-each>
</div>