如果你依赖Coldfusion的
xmlParse
,你可能运气不好。请参见以下示例:
<cfsavecontent variable="x">
<node doubleQuote="<, &, &, >, ", '" singleQuote='<, &, &, >, ", ''>
<, &, &, >, ", '
</node>
</cfsavecontent>
<cfset fileWrite(
expandPath("test.xml"),
xmlParse(x)
)>
输出为:
<?xml version="1.0" encoding="UTF-8"?>
<node doubleQuote="<, &, >, ", '" singleQuote="<, &, >, ", '">
<, &, &, >, ", '
</node>
如您所见,解析器根据其“自己”的规则完全重新生成XML。所有属性都用双引号括起来,因此不再需要在属性值中编码撇号,只需要双引号。在节点体中(
.XmlText
),根本不需要对撇号和双引号进行编码,所以还没有完成。另外,前面的实体使用html命名的实体进行(重新)编码。从技术上讲,这是有效的XML,同时也有点“HTML4友好”(
'
是HTML4中的未知实体。
您需要自己重建整个XML文档作为字符串,或者使用不同的Java库来构建XML。