我是docbook和XSLT的新手,我想在我的docbook中添加一个新的元素,我有一个XML,就像这样。
<?xml version='1.0' encoding='UTF-8'?>
<book version="5.0"
xmlns="http://docbook.org/ns/docbook">
<d:chapter>
<d:title/>
<d:section>
<d:title>Section 1</d:title>
<d:simpara>texte </d:simpara>
</d:section>
</d:chapter>
</d:book>
我需要在一个步骤中进行多次转换;第一次转换是在docbook的xml结构中添加一个新的部分,包括标题和一些文本,然后在第二次转换中生成转换,以获得我的输出文件作为pdf文件。我在一个变量中创建新的元素,使用exlt:node-set()函数将变量的内容转换为节点集,然后用标准的DocBook样式表对节点集进行处理,得到pdf输出文件。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:set="http://exslt.org/sets"
xmlns:saxon="http://icl.com/saxon"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"
xmlns:d="http://docbook.org/ns/docbook"
exclude-result-prefixes="d"
version="1.0">
<?cco_xsltype addon="DocBook5.0" toolchain="DocBook_to_PDF_FOP"?>
<!-- Import standard -->
<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/profile-docbook.xsl"/>
<!-- DocBook XSL Parameters -->
<xsl:template match="node() | @*" mode="change">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="change"/>
</xsl:copy>
</xsl:template>
<xsl:template match="d:chapter" mode="change">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="*"/>
<d:section>
<d:title> Cette section a été ajoutée </d:title>
<d:para> ce texte a été ajouté </d:para>
</d:section>
</xsl:copy>
</xsl:template>
<xsl:template match="d:book" >
<xsl:variable name="content">
<xsl:apply-templates mode="change"/>
</xsl:variable>
<xsl:apply-templates select="exsl:node-set($content)/*" />
</xsl:template>
</xsl:stylesheet>
作为结果,我希望一个PDF文件与2部分。
谢谢你的帮助,我是一个新的docbook和XSLT,我试图添加一个新的元素到我的docbook,我有一个XML,像这样的东西:
不知道这是否能回答你的问题 但它看起来好像你想实现在每个文档中选择性地添加一些标准段落。
如果输入文档中包含某个变量,它就会被一个标准段落所取代。这个段落是XSL的一部分。
如果真的是这样,为什么不 使用XInclude将XML文档和片段结合起来。? 这是一个很好的将XML文档纳入其他XML文档的可能性。一个好的开始是 了解XInclude.