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

时间:2015-02-25 06:53:05

标签: xml xslt xslt-1.0 xslt-2.0

我有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应该包含章节的全部内容,包括课程。

1 个答案:

答案 0 :(得分:1)

如果您希望所有章节的内容出现在书籍输出中以及相应的章节输出中,只需在<xsl:apply-templates/>指令之前(或之后)立即添加另一个xsl:result-document来电。< / p>