我们正在使用 XSL 转换器将十六进制代码实体转换为 mdash。这种转变按预期发生。 但是我们还要把xml中的所有
&
都转换成&输出。
现在,输出包含&
。
xsl 转换过程中,显示以下错误:-
不能在包含元素的子元素之后创建属性节点。
在使用下面的xsl时,抛出错误:-
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:output method="xml" omit-xml-declaration="no" use-character-maps="mdash" />
<xsl:character-map name="mdash">
<xsl:output-character character="—" string="&mdash;" />
</xsl:character-map>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:text disable-output-escaping="yes">&</xsl:text>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
你有一个匹配
match="@* | node()"
的模板,在模板中你用xsl:copy
做一个浅拷贝,然后,你创建一个以<xsl:text disable-output-escaping="yes">&</xsl:text>
作为第一个子节点的文本节点,然后期望<xsl:apply-templates select="@*|node()" />
处理属性节点(和子节点)进一步,即也复制它们,这对属性节点不起作用,因为一旦你输出了那个子节点,你就不能添加属性节点。
我一直不太明白你需要
xsl:text
干什么,但是你不能输出一个子节点然后尝试输出一个属性节点;首先处理属性节点,然后创建和/或处理子节点。