我有一些形式的 XML:
<definitions devices="myDevice">
<reg offset="0x0000" mnem="someRegister">
<field mnem="someField" msb="31" lsb="24 />
...
</reg>
...
</definitions>
我希望 XML 成为最终的参考,并使用 XSLT 将其转换为 HTML 用于文档,.h 用于构建(也可能是其他形式)。
HTML 版本运行良好,每个寄存器生成一个表,每个字段一行:
... (header boilerplate removed)
<xsl:for-each select="definitions/reg">
<table>
<tr>
<th><xsl:value-of select="@offset"/></th>
<th><xsl:value-of select="@mnem"/></th>
</tr>
<xsl:for-each select="field">
<tr>
<td><xsl:value-of select="@msb"/>..<xsl:value-of select="@lsb"/></td>
<td><xsl:value-of select="@mnem"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
转换为 .h 并不顺利。我完全无法在输出中生成所需的空格:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="definitions/reg">
#define <xsl:value-of select="translate(@mnem,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@offset"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我希望它能产生输出:
#define SOMEREGISTER 0x0000
但我实际上得到:
#define SOMEREGISTER0x0000
我不明白为什么我在“#define”之后得到空格,而不是在转换后的助记符之后得到空格。我尝试了一个更简单的解决方案,只有一个内联空间,结果相同。
我对此(XSLT)太陌生了,不知道我是a)做错了还是b)在tDOM中找到了限制。