Ошибка XML CDATA: тип элемента <X> должен заканчиваться соответствующим конечным тегом </ X>

Я получаю следующие данные в фиде XML:

<imagetag><![CDATA[
http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg]
]></imagetag>

У меня есть две проблемы с этим:

  1. Когда я пытаюсь проверить XML здесь, я получаю сообщение об ошибке: The element type "imagetag" must be terminated by the matching end-tag "</imagetag>".
  2. Я не могу понять регулярное выражение (Javascript) для извлечения URL. Самое близкое, что я пришел, это: ([\s\S]*)<imagetag><!\[CDATA\[([\s\S]*)\]\]><\/imagetag>([\s\S]*), Это прекрасно работает, если после перевода строки нет .jpg]но есть!

Я предполагаю, что эти две проблемы связаны, но я не уверен в причине. Любая помощь приветствуется!

1 ответ

Прежде всего, осознайте, что вам не нужен CDATA для представления URL в XML.

Во-вторых, причина, по которой вы получаете ошибку при использовании анализаторов XML, заключается в том, что ваши данные не являются XML. Ваш раздел CDATA поврежден: маркер конца CDATA, CDEnd, не может быть новой строки в нем:

[18]    CDSect     ::=      CDStart CData CDEnd
[19]    CDStart    ::=      '<![CDATA['
[20]    CData      ::=      (Char* - (Char* ']]>' Char*))
[21]    CDEnd      ::=      ']]>'

Следовательно, для вашего XML-парсера вполне допустимо выдавать ошибку.

Путь вперед - не пытаться анализировать XML с помощью регулярных выражений (хотя можно применить выборочную проверку / исправление для конкретной проблемы, такой как поиск и исправление). ]]> со встроенным пробелом). Путь вперед - исправить данные. Вот ваши данные, исправленные для правильного использования CDATA:

<imagetag><![CDATA[
http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg
]]></imagetag>

или же

<imagetag><![CDATA[http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg]]></imagetag>

Важный: CDStart должно быть <![CDATA[ а также CDEnd должно быть ]]> точно без разрывов строк. Обратите внимание, что ]]> не может появиться в разделе CDATA; Разделы CDATA не могут быть вложенными.

Если вы не можете исправить данные, отклоните данные. Неправильно обрабатывать текстовые данные, которые неправильно сформированы, как если бы это был XML; это только увековечивает проблемы.

Другие вопросы по тегам