docbook table 的某些元素未由样式表写入
Certain element for docbook table does not get written by stylesheet
我目前正在使用 XSLT 样式表将 XML 文档转换为 docbook 文档。该文档必须包含相当多的 table,其中一些具有相当复杂的格式。在编写 docbook 时,我通常会通过添加像
这样的描述来格式化 table 单元格
<?dbhtml bgcolor="#EEEEEE" ?>
这通常可以正常工作。但是,我没有找到一种方法可以将转换过程中的这部分文档打印出来。
这是模板之一:
<xsl:template match="//ns:chapter" priority="5">
<sect1 xml:id="sec1.xyz">
<title>Chapter tbd</title>
<para>introduction</para>
<table frame="all">
<title>Table</title>
<tgroup cols="2">
<colspec colname="c1" colnum="1" colwidth="2*"/>
<colspec colname="c2" colnum="2" colwidth="8*"/>
<tbody>
<xsl:for-each select="//ns:myElement[not(@classID=preceding::ns:myElement/@classID)]">
<xsl:variable name="outerElement" select="."/>
<row>
<entry namest="c1" nameend="c2" align="center"><?dbhtml bgcolor="#EEEEEE" ?>Class
<xsl:value-of select="current()/@classID"/>:
<xsl:value-of select="current()/@classTitle"/>
</entry>
</row>
<xsl:for-each select="//ns:myElement[@classID=$outerElement/@classID]">
<row>
<entry>
<xsl:value-of select="current()/@id"/>
</entry>
<entry>
<xsl:value-of select="current()/@title"/>
</entry>
</row>
</xsl:for-each>
</xsl:for-each>
</tbody>
</tgroup>
</table>
</sect1>
</xsl:template>
该模板工作得很好,并在 docbook 中打印出 table。然而,该部分被简单地忽略了。
我有点理解为什么会这样(显然
有没有人给我任何提示,我该如何解决这个问题?!
谢谢
诺伯特
编辑:
作为一个最小的工作示例:尝试对包含至少一个元素的任何 XML 文档使用以下样式表。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="*">
<?dbhtml bgcolor="#EEEEEE" ?>
</xsl:template>
</xsl:stylesheet>
这是您可以使用 XSLT 创建的处理指令,如 <xsl:processing-instruction name="dbhtml">bgcolor="#EEEEEE"</xsl:processing-instruction>
。参见 https://www.w3.org/TR/xslt-30/#creating-processing-instructions
我目前正在使用 XSLT 样式表将 XML 文档转换为 docbook 文档。该文档必须包含相当多的 table,其中一些具有相当复杂的格式。在编写 docbook 时,我通常会通过添加像
这样的描述来格式化 table 单元格<?dbhtml bgcolor="#EEEEEE" ?>
这通常可以正常工作。但是,我没有找到一种方法可以将转换过程中的这部分文档打印出来。
这是模板之一:
<xsl:template match="//ns:chapter" priority="5">
<sect1 xml:id="sec1.xyz">
<title>Chapter tbd</title>
<para>introduction</para>
<table frame="all">
<title>Table</title>
<tgroup cols="2">
<colspec colname="c1" colnum="1" colwidth="2*"/>
<colspec colname="c2" colnum="2" colwidth="8*"/>
<tbody>
<xsl:for-each select="//ns:myElement[not(@classID=preceding::ns:myElement/@classID)]">
<xsl:variable name="outerElement" select="."/>
<row>
<entry namest="c1" nameend="c2" align="center"><?dbhtml bgcolor="#EEEEEE" ?>Class
<xsl:value-of select="current()/@classID"/>:
<xsl:value-of select="current()/@classTitle"/>
</entry>
</row>
<xsl:for-each select="//ns:myElement[@classID=$outerElement/@classID]">
<row>
<entry>
<xsl:value-of select="current()/@id"/>
</entry>
<entry>
<xsl:value-of select="current()/@title"/>
</entry>
</row>
</xsl:for-each>
</xsl:for-each>
</tbody>
</tgroup>
</table>
</sect1>
</xsl:template>
该模板工作得很好,并在 docbook 中打印出 table。然而,该部分被简单地忽略了。
我有点理解为什么会这样(显然
有没有人给我任何提示,我该如何解决这个问题?!
谢谢 诺伯特
编辑:
作为一个最小的工作示例:尝试对包含至少一个元素的任何 XML 文档使用以下样式表。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="*">
<?dbhtml bgcolor="#EEEEEE" ?>
</xsl:template>
</xsl:stylesheet>
这是您可以使用 XSLT 创建的处理指令,如 <xsl:processing-instruction name="dbhtml">bgcolor="#EEEEEE"</xsl:processing-instruction>
。参见 https://www.w3.org/TR/xslt-30/#creating-processing-instructions