我有类似于的XML源代码
<book>
<body>
<div data-type="book" id="book">
<p>content</p>
<p>para 1</p>
<p>para 2</p>
<p>para 3</p>
<div id="chapter1" data-type="chapter">
<p>para 1</p>
<p>para 2</p>
<p>para 3</p>
<div id="lesson1" data-type="lesson">
<div data-type="body">
<p>para 1</p>
<p>para 2</p>
<p>para 3</p>
</div>
</div>
</div>
</div>
</body>
</book>
我正在创建一个基于id值的输出文件夹和文件,如:
book1.xml
book1/
chapter1.xml
chapter1/
lesson1.xml
lesson2.xml
我的XSLT是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="div" mode="path">
<xsl:value-of select="@id"/>
<xsl:text>/</xsl:text>
</xsl:template>
<xsl:template
match="div[@data-type='book' or @data-type='chapter' or @data-type='lesson']">
<xsl:variable name="id" select="@id"/>
<xsl:variable name="content">
<xsl:apply-templates select="ancestor::div" mode="path"/>
</xsl:variable>
<xsl:result-document href="output/{$content}/{@id}.xml">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
问题:
我正在使用上面的XSLT获得正确的文件夹和文件结构。但是,当创建book1.xml、chapter.xml和lesson.xml时,并不是复制整个内容。book1.xml中没有章节内容。我需要的是book1.xml应该有书的全部内容。chapter.xml应该包含本章的全部内容,包括课程。
如果希望所有章节的内容都显示在书籍输出以及相应的章节输出中,只需在xsl:result-document
指令之前(或之后)添加另一个<xsl:apply-templates/>
调用即可。