首页 > 解决方案 > 通过 isXML() 但在 ColdFusion 中失败 xmlParse() 的 XML

问题描述

我正在为一些看起来像这样的古老代码编写一个测试用例:

if (isXML(foo)) {
  try {
    bar = xmlParse(foo);
  }
  catch(any e) {
    // log error
  }
}

Blame 揭示了一些背景故事,表明我们看到了一些isXML返回 true 的 XML 字符串,但xmlParse抛出了某种异常。

什么样的绳子会产生这种效果?

我尝试输入一个我知道可以解析的字符串,然后&在一个元素中添加一个,但随后isXML返回 false。我不确定还能尝试什么。

标签: xmlcoldfusion

解决方案


以下是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.


推荐阅读