Ошибка XML CDATA: тип элемента <X> должен заканчиваться соответствующим конечным тегом </ X>
Я получаю следующие данные в фиде XML:
<imagetag><![CDATA[
http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg]
]></imagetag>
У меня есть две проблемы с этим:
- Когда я пытаюсь проверить XML здесь, я получаю сообщение об ошибке:
The element type "imagetag" must be terminated by the matching end-tag "</imagetag>".
- Я не могу понять регулярное выражение (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; это только увековечивает проблемы.