Чтение в искаженном XML (незашифрованные объекты XML) с помощью PHP - PullRequest
3 голосов
/ 25 июня 2009

У меня возникли проблемы с анализом некорректного XML в PHP. В частности, я запрашиваю сторонний веб-сервис, который возвращает данные в формате XML без кодирования сущностей XML в реальных данных. Например, один из элементов содержит сердце ASCII, <3, без кавычек, которое анализатор XML видит как открывающий тег. Это должно быть '& lt; 3'. </p>

Прямо сейчас я просто передаю строку XML в элемент SimpleXMLEle, который, как и ожидалось, не срабатывает в этих случаях. Я немного осмотрелся, и мне кажется, что пакет PHP Tidy может мне помочь, но объем конфигурации, который вы можете сделать, огромен: (

Таким образом, мне просто интересно, была ли у кого-то еще проблема, подобная этой, и, если да, как они смогли ее решить.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 25 июня 2009

Попробуйте tidy.repairString :

php > $tidy = new tidy();
php > $repaired = $tidy->repairString("<foo>I <3 Philadelphia</foo>", array("input-xml"=>1));
php > print($repaired);
<foo>I &lt;3 Philadelphia</foo>
php > $el = new SimpleXMLElement($repaired);
0 голосов
/ 25 июня 2009
  1. Читать содержимое в виде строки.
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. Загрузить преобразованную строку в SimpleXMLElement

Пока у меня это сработало.

...