我刚接触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>因此,我希望与2节的pdf文件。
谢谢你的帮助。
发布于 2020-05-07 14:53:28
不确定这是否可以回答您的问题。但看起来你似乎想要实现在每个文档中随意添加一些标准段落。
如果输入文档包含某个变量,它将被替换为标准段落。这一段是XSL的一部分。
如果确实是这样,为什么不使用XInclude将文档和片段组合起来呢?这是将XML文档包含到其他XML文档中的一个很好的可能性。Understanding XInclude是一个很好的开始。
https://stackoverflow.com/questions/61391614
复制相似问题