提问人:Rahul 提问时间:7/10/2023 更新时间:7/20/2023 访问量:39
从 XML 中取消转义用户定义的实体
unescape userdefined entities from xml
问:
输入 xml 中有一些用户定义的实体,如 和 。
我们在下面的 xsl 中将这些实体定义为 DOCTYPE:-&key;
‐
<!DOCTYPE xsl:stylesheet [
<!ENTITY key "&key;">
<!ENTITY hyphen "&hyphen;">
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
exclude-result-prefixes="#all"
expand-text="yes"
version="3.0">
<xsl:output method="xml" omit-xml-declaration="no" use-character-maps="mdash" />
<xsl:character-map name="mdash">
<xsl:output-character character="—" string="&mdash;"/>
<xsl:output-character character="&" string="&amp;" />
<xsl:output-character character=""" string="&quot;" />
<xsl:output-character character="'" string="&apos;" />
<xsl:output-character character="§" string="&sect;" />
<xsl:output-character character="&key;" string="&key;" />
<xsl:output-character character="‐" string="&hyphen;" />
</xsl:character-map>
<xsl:mode on-no-match="shallow-copy"/>
</xsl:stylesheet>
现在在输出中,entites 也应该保持不变,即 和。
但是,在输出字符中使用在 DOCTYPE 下定义的用户定义的实体时,会发生以下错误:-&key;
‐
Static error at xsl:output-character
XTSE0020: character attribute must be a single XML character
有没有办法使用它或取消转义输出 xml 中的实体 和 ?&key;
‐
答:
0赞
Michael Kay
7/20/2023
#1
有没有办法使用它或取消转义输出 xml for &key 中的实体;和 ‐?
字符映射提供了一种更改 XSLT 输出中各个字符的序列化的方法。它们不提供更改任意字符串序列化的方法。所以简单的答案是“不”。
如果您真的想在序列化输出中生成实体引用,我的建议是 XSLT 处理器应该生成类似的东西,并且您应该在后处理阶段将其转换为(使用非 XML 感知工具)。§key;
&key;
但是,我还会考虑使用实体引用是否是满足业务需求的最佳方式。使用 XInclude 元素或处理指令可以为您提供更大的灵活性。
评论
<!ENTITY key "&key;">
character="&key;"
&key;
&
k
e
y
;
character
saxon:internal-dtd-subset
xsl:output