XSLT中每个子节点的结果文档



我有类似于的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/>调用即可。

最新更新