【发布时间】:2015-09-14 10:02:13
【问题描述】:
我有一个如下的 xml,
<doc>
<h1>header 1</h1>
<p>para 1</p>
<p>para 2</p>
<h1>header 2</h1>
<p>para 3</p>
<p>para 4</p>
<h1>header 3</h1>
<p>para 5</p>
<p>para 6</p>
</doc>
我的要求是从<h1> 创建无序列表,并将这些列表项与其下面的<p> 节点链接。
所以期望的输出应该是,
<doc>
<div name="list">
<ul>
<li><a href="h1-1">header 1</a></li>
<li><a href="h1-2">header 2</a></li>
<li><a href="h1-3">header 3</a></li>
</ul>
</div>
<div class="content">
<div id="h1-1">
<p>para 1</p>
<p>para 2</p>
</div>
<div id="h1-2">
<p>para 3</p>
<p>para 4</p>
</div>
<div id="h1-3">
<p>para 5</p>
<p>para 6</p>
</div>
</div>
</doc>
我写了以下xsl来完成这个任务,
<doc>
<div name="list">
<ul>
<xsl:for-each-group select="*" group-starting-with="h1">
<li><a href="h1-{count(preceding::h1)+1}"><xsl:apply-templates/></a></li>
</xsl:for-each-group>
</ul>
</div>
<div class="content">
<xsl:for-each select="h1">
<div id="h1-{count(preceding::h1)+1}">
<!-- should copy follwing <p> nodes in <h1> -->
</div>
</xsl:for-each>
</div>
</doc>
我无法解决的是如何将<p> 节点复制到<h1>,但在出现另一个<h1> 之前。 (示例会给出清晰的想法。)
谁能建议我解决这个问题?
【问题讨论】: