2015-06-11 5 views
-1

Я искал 2 дня для этой проблемы ... У меня есть XML, я разбираю этот XML-файл. Одно из содержимого файла XML имеет «&». Его поле URL.XML Parser SAX и amp в Python

В примере .. если URL-адрес подобен.

http://www.url.com/content/hello&whatsup

XML-анализатор может вернуть мне http://www.url.com/content/hello

как я могу решить эту проблему? используя xml sax lib. Я пытаюсь использовать xml utils sax.

ответ

0

Анализатор XML может интерпретировать часть «» в качестве объекта xml, и поскольку она не устраняет, кажется, что она терпит неудачу и поедает строку. Объекты XML в основном используются для включения метасимволов, которые в противном случае интерпретировались бы как инструкции о том, как читать файл. Большинство, если не все библиотеки вывода xml будут автоматически кодировать & до & amp; (без пробела перед точкой с запятой) для вас, пока вы выписываете элементы по умолчанию.

У вас есть 3 варианта. Одним из них является замена URL в XML с

http://www.url.com/content/hello&whatsup 

Вы можете сделать какой-то первый проход по файлу, чтобы правильно кодировать & «s, но не может быть никакого надежного способа сделать это. Вы можете попробовать заменить & на replaceme_ampersand, прочитать его и заменить на &. Но вы должны убедиться, что файл не содержит фактических ссылок на законные сущности (или быть в порядке, не разрешая их). Другая возможность заключается в том, чтобы использовать побег CDATA вокруг содержания вы знаете, чтобы содержать неэкранированные символы вроде так:

<![CDATA[http://www.url.com/content/hello&whatsup]]> 

Второй вариант не использовать любой XML-парсер и вместо того, чтобы разобрать файл вручную, ищет для начала/окончания тегов с помощью шаблон регулярного выражения. Я бы выбрал этот вариант, в зависимости от сложности xml-файла и того, что он содержит.

Третий вариант - попытаться найти синтаксический анализатор или параметр xml, который позволит вам изменить поведение по умолчанию, когда оно обнаружит неизвестную/недействительную ссылку на объект xml. Вы можете переопределить это поведение «есть сущность», либо подняв ошибку, либо оставив недопустимый текст как есть. Ты сам по себе!

Смежные вопросы