Coldfusion - XML格式化从API调用返回的字符串

时间:2009-11-04 16:50:35

标签: xml parsing coldfusion special-characters

我们调用一个返回XML格式数据字符串的API。我们想通过XMLParse()将此字符串转换为ColdFusion XML对象。当特殊字符显示在数据值中时,会出现问题。例如,像这样的字符:

  — –

(是的,原始数据包含它们的HTML编码等价物)。在执行XMLParse()时,它会在这些编码字符上引发错误。这是一个错误的例子:

我们的一部分字符串: <event>Hello &nbsp; World</event>

错误: Reference to undefined entity "&nbsp;"

使这些字符与XMLParse()兼容的最佳方法是什么?更重要的是 - 如果我们不总是知道角色会是什么,我们怎么能这样做呢?

谢谢!

(这是在ColdFusion 6服务器上)

7 个答案:

答案 0 :(得分:2)

我建议:

ReplaceList(xml, "&nbsp;,&mdash;,&ndash;", "#Chr(160)#,#Chr(8212)#,#Chr(8211)#")

维基百科似乎有a quite complete list of character entities及其字符代码。我会选择使用Chr()来创建替换字符串,这样您就可以明确且独立于源代码文件编码。

答案 1 :(得分:1)

replace(xml, '&','&amp;','all');

应该允许它被验证。您也可以使用DTD来定义这些字符,但正如您所说,您并不总是知道字符将是 - 我可能只是替换。

答案 2 :(得分:1)

这似乎是一个非常好的功能,删除扩展字符并用它们的HTML等效替换它们。

http://www.petefreitag.com/item/202.cfm

答案 3 :(得分:1)

请参阅此相关问题:Decode Numeric HTML Entities in ColdFusion?

使用它,然后使用XmlFormat(),然后使用XmlParse()它。

“nbsp不是5个预定义字符实体引用之一”,@stevenerat said

答案 4 :(得分:1)

Yup,nbsp不是预定义的字符实体引用之一,需要使用xml format()进行转义,例如xmlparse(xmlformat(theString))。

http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references http://livedocs.adobe.com/coldfusion/7/htmldocs/00000668.htm

答案 5 :(得分:0)

更换“&amp;”使用"&amp;"然后在解析后再返回

<cfsavecontent variable="xmlString">
    <event>Hello&nbsp;World&amp;</event>
</cfsavecontent>
<cfset xmlString = Replace(xmlString, "&", "&amp;", "all") />
<cfset doc = Xmlparse(xmlString) />
<cfset value = Replace(doc.event.xmlText, "&amp;", "&","all") />

答案 6 :(得分:-2)

您可以查看XmlFormat()。易于使用:

<cfset string = XmlFormat(string)>