我有一个用XSL转换的XML文件。有些元素必须更改,有些必须保留原样 - 特别是带有实体的文字&amp; quot; ,&amp; amp; ,&amp; apos ; ,&amp; lt; ,&amp; gt; 应保留原样,在我的情况下&amp; quot; 并且&amp; << / strong>相应地更改为“和'。
测试XML:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<element>
"
&
'
<
>
</element>
</root>
转换文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="no" indent="no" />
<xsl:template match="element">
<xsl:copy>
<xsl:value-of disable-output-escaping="no" select="." />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
结果:
<?xml version="1.0" encoding="UTF-8"?>
<element>
"
&
'
<
>
</element>
期望的结果:
<?xml version="1.0" encoding="UTF-8"?>
<element>
"
&
'
<
>
</element>
我有两个问题:
答案 0 :(得分:3)
原因是,<
,>
和&
始终必须以XML格式转义。它们在XML中具有特殊含义,因此如果它们是数据的一部分(而不是标记),则必须对它们进行特殊处理。
另外两个,'
和"
,可以转义,它们的实体名称是XML已知的(主要是为了启用正确运行的属性值,如下所示:
<xml ackbar="He said, "It's a trap!"" />
<xml ackbar='He said, "It's a trap!"' />
在他们逃避并非绝对必要的所有地方,它们都可以按字面意思发生。
结果信息集(例如以DOM的形式)将完全相同,您不应过多关注它们是字面上出现还是作为XML文件中的实体出现。
事实上,您的所有数据都可以以转义形式出现(编号实体,如
)而不更改实际文档 - 只有序列化表示不同。
只要您使用XML感知工具(例如DOM解析器),您就永远不会注意到差异。推论:如果您不使用支持XML的工具(例如正则表达式或字符串操作),则应立即停止。 ; - )
答案 1 :(得分:0)
你总是可以逃脱原来的&符号,实质上它看起来像
&quot;