提问人:Rahul 提问时间:5/15/2023 最后编辑:Sujith KumarRahul 更新时间:5/16/2023 访问量:167
解析 xsl 错误 - javax.xml.transform.TransformerException:xsl:output 元素上不允许使用 字符映射
Parsing xsl error- javax.xml.transform.TransformerException: use-character-maps attribute is not allowed on the xsl:output element
问:
在 Java 中使用 XML 序列化程序解析其中一个 XML 文件时,HTML 实体被转换为其相应的十六进制代码值(例如 mdash 输出是“hexcode value-#x2014;”),因此反映到最终的输出文件中。为了将十六进制代码值转换为普通实体,我们尝试了 xsl 转换,该转换会抛出错误“javax.xml.transformerException:xsl:output 元素不允许使用 use-character-maps 属性”。
以下是使用的 xsl:-
<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:output omit-xml-declaration="yes" />
<xsl:character-map name="mdash">
<xsl:output-character character="—" string="&mdash;" />
</xsl:character-map>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我们使用转换器工厂对象来转换最终的 XML,以通过 xsl 文件将十六进制代码转换为普通实体。
答:
0赞
Michael Kay
5/15/2023
#1
错误消息向我表明您正在尝试使用 XSLT 1.0 处理器运行 XSLT 2.0 样式表。
从技术上讲,如果样式表显示 version=“2.0”,则 XSLT 1.0 处理器应该在“向前兼容模式”下运行,该模式应该忽略它不理解的任何元素和属性(如),而不是引发错误。但我不确定这是否总是正确实现。use-character-maps
0赞
Rahul
5/16/2023
#2
正如马丁的评论中提到的。 将 saxon jar 导入 classpath 并使用 TransformerFactory 对象(如下所示)修复了此错误:-
TransformerFactory tfactory = new net.sf.saxon.TransformerFactoryImpl();
评论