这是xml:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapnode>
<n>
<node id="1"/>
<node id="2"/>
<node id="3"/>
</n>
<n>
<node id="4"/>
<node id="5"/>
<node id="6"/>
<node id="7"/>
<node id="8"/>
</n>
<n>
<node id="9"/>
<node id="10"/>
</n>
<n>
<node id="11"/>
<node id="12"/>
</n>
</sitemapnode>
我想让它像:
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>
<ul>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
</ul>
</div>
我无法解决这个问题...
我这样尝试:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="number" select="ceiling(count(/*/*/node) div 3)"/>
<xsl:template match="*">
<div>
<xsl:apply-templates select="/*/*/node[position() mod $number = 1]"/>
</div>
</xsl:template>
<xsl:template match="node">
<ul>
<xsl:apply-templates select="self::node|following-sibling::node[position() < $number]" mode="list"/>
</ul>
</xsl:template>
<xsl:template match="node" mode="list">
<li>
<xsl:value-of select="@id"/>
</li>
</xsl:template>
</xsl:stylesheet>
转换后,结果如下:
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ul>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
</ul>
<ul>
<li>8</li>
</ul>
<ul>
<li>9</li>
<li>10</li>
</ul>
<ul>
<li>11</li>
<li>12</li>
</ul>
</div>
那不是我想要的。我怎样才能使它正确?我正在使用 XSLT 1.0 和 .Net 3.5。