我正在为一些看起来像这样的古老代码编写测试用例:
if (isXML(foo)) {
try {
bar = xmlParse(foo);
}
catch(any e) {
// log error
}
}
Run Code Online (Sandbox Code Playgroud)
Blame揭示了一些背景故事,表明我们看到一些isXML返回true的XML字符串,但是却xmlParse引发了某种异常.
什么样的字符串会产生这种效果?
我已经尝试输入一个我知道可以解析的字符串,然后&在元素中添加一个,但然后isXML返回false.我不知道还有什么可以尝试的.
以下是文档IsXml()中的使用详细信息:
该函数确定文本是否是格式良好的 XML,即它是否符合所有 XML 语法和结构规则。该字符串不必是完整的 XML 文档。该函数不会根据文档类型定义 (DTD) 或 XML 架构进行验证。
因此,可能已经使用了某些名称空间,但未找到定义。IE,
<cfsavecontent variable="xml">
<?xml version="1.0" encoding="UTF-8"?>
<xyz:note>
<xyz:to>Myself</xyz:to>
<xyz:from>You</xyz:from>
<xyz:heading>Reminder</xyz:heading>
<xyz:body>Test</xyz:body>
</xyz:note>
</cfsavecontent>
<cfset xml = trim( xml )>
<!--- Try to parse --->
<cfset isXmlParsable = TRUE>
<cftry>
<cfset XmlParse( xml )>
<cfcatch>
<!--- Will come here as xyz namespace is not defined --->
<cfset isXmlParsable = FALSE>
</cfcatch>
</cftry>
<cfoutput>
Is XML Valid: #IsXml( xml )#<br>
Is XML Parsable: #isXmlParsable#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
输出:
XML 是否有效:是
XML 是否可解析:FALSE
这里是GIST。