【发布时间】:2021-02-21 16:15:30
【问题描述】:
我想用 xsltproc(所以 XSLT 1.1!)转换一个 XML 文件(例如 junit.xml 文件)以生成一个文本文件,该文件将显示在类 unix 终端中。为清楚起见,我想使用 ANSI 转义序列用颜色突出显示某些部分。
例如,给定示例 XML 文件 in.xml:
<?xml version="1.0" encoding="UTF-8"?>
<red>I love XML</red>
还有一个示例 XSLT 文件 color.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="no"/>
<xsl:template match="red">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
使用xsltproc,我得到:
如何更改 XSLT 文件以生成以下结果?
我试过了:
- 使用
select="concat(string('&#27;[31m'),.)"。我收到parser error : xmlParseCharRef: invalid xmlChar value 27。 - 使用
CDATA等 - 或
<xsl:text disable-output-escaping="yes">
但是对于xsltproc,这个简单的事情似乎是不可能的。
注意:现在,我将只添加一个后处理步骤,例如在 XSL 文件中使用 select="concat(string('&amp;#27;[31m'),.)"/>,然后
xsltproc color.xsl in.xml | sed -r 's//\x1b/g'
【问题讨论】:
-
xsltproc 是否有支持 XML 1.1 而不是 XML 1.0 的开关?因为在 XML 1.1 中你可以使用
&#27;。 -
我怀疑您会发现 xsltproc 只能生成包含有效 XML 1.0 字符的输出,其中不包括 x1B 等控制字符。
-
感谢提升 XML 版本的建议。不幸的是,xsltproc 确实不支持它。