【问题标题】:XML that passes isXML() but fails xmlParse() in ColdFusion通过 isXML() 但在 ColdFusion 中失败 xmlParse() 的 XML
【发布时间】:2018-04-26 19:38:28
【问题描述】:

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

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

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

什么样的字符串会产生这种效果?

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

【问题讨论】:

  • 一些 XML 字符串向我们展示。 某种例外向我们展示。在此之前,这里有一个 SWAG:isXML() 仅检查格式正确,但 xmlParse() 正在检查架构的有效性。
  • “一些 XML 字符串”部分正是我所追求的。可悲的是,这样的字符串和任何记录的异常现在已经过去好几年了。架构有效性很可能就是问题所在。我会调查的。 :)
  • @kjhughes 我相信所有 CF 函数名称都不区分大小写,因此“xmlParse()”和“XMLPARSE()”是一回事。
  • 我在使用 isImage、isImageFile 和 isPDF 时遇到过类似的问题。这些函数将评估为“true”,然后在尝试读取文件时抛出错误。
  • IsXml(): 该函数判断文本是否为格式良好的XML,即是否符合所有XML语法和结构规则。字符串不必是完整的 XML 文档。该函数不针对文档类型定义 (DTD) 或 XML 模式进行验证。 也许 xml 正在使用某些命名空间但无法找到定义。示例:trycf.com/gist/646fbaf11338a8681586aeb06a8b7288/…

标签: xml coldfusion


【解决方案1】:

以下是DOCSIsXml()的使用详情:

该函数判断文本是否为格式良好的 XML,即它 符合所有 XML 语法和结构规则。字符串不 必须是完整的 XML 文档。该功能不验证 针对文档类型定义 (DTD) 或 XML 架构。

因此,可能已使用某些命名空间但未找到定义。即,

<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 是否有效:是
XML 是否可解析:FALSE

这里是GIST

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多