XML, который передает isXML (), но не выполняет xmlParse () в ColdFusion - PullRequest
0 голосов
/ 26 апреля 2018

Я пишу контрольный пример для какого-то древнего кода, который выглядит следующим образом:

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

Blame раскрывает некоторую предысторию, указывающую на то, что мы видели некоторые строки XML, для которых isXML вернул true, но для которых xmlParse выдал какое-то исключение.

Какая строка будет производить этот эффект?

Я попытался вставить строку, которую, как я знаю, можно нормально проанализировать, затем добавил & в элемент, но затем isXML возвращает false. Я не уверен, что еще попробовать.

1 Ответ

0 голосов
/ 27 апреля 2018

Ниже приведены сведения об использовании IsXml() из DOCS :

Эта функция определяет, является ли текст правильно сформированным 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-разбор: ЛОЖЬ

Вот это GIST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...