使用 xsl 转换将 `&` 转换为 `&` 但抛出错误“et.sf.saxon.event.NoOpenStartTagException:”

问题描述 投票:0回答:1

我们正在使用 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="&#x2014;" string="&amp;mdash;" />
</xsl:character-map>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
xslt xml-parsing saxon saxparser xalan
1个回答
0
投票

你有一个匹配

match="@* | node()"
的模板,在模板中你用
xsl:copy
做一个浅拷贝,然后,你创建一个以
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>
作为第一个子节点的文本节点,然后期望
<xsl:apply-templates select="@*|node()" />
处理属性节点(和子节点)进一步,即也复制它们,这对属性节点不起作用,因为一旦你输出了那个子节点,你就不能添加属性节点。

我一直不太明白你需要

xsl:text
干什么,但是你不能输出一个子节点然后尝试输出一个属性节点;首先处理属性节点,然后创建和/或处理子节点。

© www.soinside.com 2019 - 2024. All rights reserved.