xml - 通过 isXML() 但在 ColdFusion 中失败 xmlParse() 的 XML
问题描述
我正在为一些看起来像这样的古老代码编写一个测试用例:
if (isXML(foo)) {
try {
bar = xmlParse(foo);
}
catch(any e) {
// log error
}
}
Blame 揭示了一些背景故事,表明我们看到了一些isXML
返回 true 的 XML 字符串,但xmlParse
抛出了某种异常。
什么样的绳子会产生这种效果?
我尝试输入一个我知道可以解析的字符串,然后&
在一个元素中添加一个,但随后isXML
返回 false。我不确定还能尝试什么。
解决方案
以下是IsXml()
来自DOCS的使用详情:
该函数确定文本是否为格式良好的 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>
输出:
XML 是否有效:YES
XML 是否可解析:FALSE
这里是GIST
.
推荐阅读
- javascript - 为什么我们需要在 webpack 中排除 node_modules?
- mysql - 此 SQL 查询中的错误是什么?
- acumatica - 如何在 Acumatica 的 Modren UI 菜单中设置用户定义的图标
- python - 域端口 uWsgi 教程 - uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html#about-the-domain-and-port
- c# - 类层次结构,按优先级获取属性
- pandas - 将 BED 文件读入 pandas 数据框(Windows)
- codeigniter - 如何用一个控制器文件调用多个函数?
- python - 为神经网络添加冗余
- java - 在 Scanner 类中使用可变参数
- reactjs - 当使用我的反应钩子实现选择任何复选框时,启用按钮有什么问题?