给定如下输入:
<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>
使用 XSLT 1.0,我如何将相邻<code>
元素分组如下:
<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>
这就是我目前无法正常工作的内容,因为所有源代码都在所有其他内容之后被分组到一个选择器中(如本例中的段落)。
<!-- 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>