遇到Ampersand符号时,XSLT崩溃

时间:2013-03-19 17:20:25

标签: ampersand

我在尝试输出包含Ampersand符号(&)的某个XML标记时遇到了一些麻烦。

更具体的是,当我尝试输出以下标签时。我收到错误

<fullname>Ben & Jerry</fullname>

然后使用以下标记运行正常

<fullname>Ben and Jerry</fullname>

我已尝试使用以下代码

<xsl:template match="fullname">
    <xsl:apply-templates/>
</xsl:template>

我也试过

<xsl:template match="fullname">
    <xsl:value-of-select="." disable-output-escaping="Yes"/>
</xsl:template>

两者都导致了错误。我如何使它工作的唯一方法是使用像这样的CDATA

<fullname><![CDATA[Ben & Jerry]]></fullname>

但是,我无法控制我收到的XML文件,因此这不是一个可行的选择。我可以在XSLT中做些什么来规避/解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

Ampersand不能在格式良好的XML中出现。你的例子应该是

<fullname>Ben &amp; Jerry</fullname>

我认为你不能用任何XSLT处理器解决这个问题。您需要修复生成XML的任何内容,以便格式良好。

答案 1 :(得分:1)

  

更具体的是,当我尝试输出以下标签时。我得到了   错误

     

<fullname>Ben & Jerry</fullname>

实际上,这不是标签。它是一个开始标记,后跟一些无效内容,后跟一个结束标记。

您无法使用XSLT输出无效内容。如果必须输出非XML的东西,则需要使用非XML工具来执行此操作。而且您更有可能在非XML论坛上获得建议。

您尚未明确的是您的输入和输出。您说您正在尝试输出无效的XML,但您没有说输入是什么。