在我的XML中,我有章节的章节,我需要生成一个目录,以便:
<chapter id="1"><title>Chapter 1</title><p>text</p></chapter>
<chapter id="2"><title>Chapter 2</title><p>text</p></chapter>
转换为
<!-- Table Of Contents -->
<div class="contents">
<ul>
<li><a href="#1">Chapter 1</a></li>
<li><a href="#2">Chapter 2</a></li>
</ul>
</div>
<!-- Actual Content -->
<div class="chapter" id="1"><p>text</p></div>
<div class="chapter" id="2"><p>text</p></div>
不幸的是,当我尝试使用xsl:for-each
生成目录时,实际的章节似乎从输出中消失了。我该如何解决这个问题?
答案 0 :(得分:6)
这个XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<div>
<div class="contents">
<ul>
<xsl:apply-templates select="chapter" mode="contents" />
</ul>
</div>
<xsl:apply-templates select="chapter" />
</div>
</xsl:template>
<xsl:template match="chapter" mode="contents">
<li>
<a href="#{@id}">
<xsl:value-of select="title" />
</a>
</li>
</xsl:template>
<xsl:template match="chapter">
<div class="chapter" id="{@id}">
<xsl:apply-templates select="*" />
</div>
</xsl:template>
<xsl:template match="chapter/title" />
</xsl:stylesheet>
应用于此输入时:
<chapters>
<chapter id="1">
<title>Chapter 1</title>
<p>text</p>
</chapter>
<chapter id="2">
<title>Chapter 2</title>
<p>text</p>
</chapter>
</chapters>
将产生:
<div>
<div class="contents">
<ul>
<li>
<a href="#1">Chapter 1</a>
</li>
<li>
<a href="#2">Chapter 2</a>
</li>
</ul>
</div>
<div class="chapter" id="1">
<p>text</p>
</div>
<div class="chapter" id="2">
<p>text</p>
</div>
</div>
如果你能向我们展示你的XSLT(我认为有2,410个声望点可以提供给你们很明显),我们可以告诉你你做错了什么。