У меня проблема, когда я пытаюсь прочитать XML-документ с помощью PHP-функции simplexml_load_file () Это предупреждения, которые я получаю!

Warning: simplexml_load_file(): URL:81: parser error : AttValue: " or ' expected in URL on line 15
Warning: simplexml_load_file(): <img src=elite.png><br> in URL on line 15
Warning: simplexml_load_file(): ^ in URL on line 15
Warning: simplexml_load_file(): URL:81: parser error : attributes construct error in URL on line 15
Warning: simplexml_load_file(): <img src=elite.png><br> in URL line 15
Warning: simplexml_load_file(): ^ in URL on line 15
Warning: simplexml_load_file(): URL:81: parser error : Couldn't find end of Start Tag img >line 81 in URL on line 15
Warning: simplexml_load_file(): <img src=elite.png><br> in URL on line 15
Warning: simplexml_load_file(): ^ in URL on line 15
Warning: simplexml_load_file(): URL:82: parser error : Opening and ending tag mismatch: br line 81 and programbeskrivelse in URL on line 15
Warning: simplexml_load_file(): er vurderet og rådgivet af de bedste affiliates i branchen.</programbeskrivelse in URL on line 15
Warning: simplexml_load_file(): ^ in URL on line 15
Warning: simplexml_load_file(): URL:91: parser error : Opening and ending tag mismatch: br line 80 and program in URL on line 15
Warning: simplexml_load_file(): </program> in URL on line 15
Warning: simplexml_load_file(): ^ in URL on line 15

Как видите, я думаю, что проблема заключается в теге <img src=elite.png> в XML-файле:

<program><programid>ID</programid>
<programnavn>NAME</programnavn>
<programurl>URL</programurl>
<programbeskrivelse>SOME TEXT
<br>
<img src=elite.png><br>
SOME MORE TEXT</programbeskrivelse>
<programbetingelser></programbetingelser>
<kategoriid>5</kategoriid>
<kategorinavn>Tøj, mode, livsstil o.l.</kategorinavn>
<feed>ja</feed>
<kliksats>0.00</kliksats>
<leadsats>0.00</leadsats>
<provision>10.00</provision>
<affiliatelink>N/A</affiliatelink>
</program>

Но это внешний XML-файл, поэтому я не могу просто вносить изменения в XML-файл. Есть ли способы проигнорировать тег и выйти перед использованием SimpleXML? Или есть другой способ сделать это?

ПРИМЕЧАНИЕ: все мои URL-адреса переписаны с URL-адресом

И я пробовал использовать stripslashes () на пути, но проблема не в этом!

0
mschadegg 7 Янв 2014 в 22:07

2 ответа

Лучший ответ

Я придумал решение, основанное на комментариях Chrashspeeders:

$remove = file_get_contents(stripslashes("URL"));

$remove = preg_replace("/<programbeskrivelse>[\d\D]*?<\/provision>/", "", $remove);

$remove = str_replace(array("&amp;", "&"), array("&", "&amp;"), $remove);

$xml = simplexml_load_string($remove);

Про производительность ничего не знаю, но работает.

$remove = str_replace(array("&amp;", "&"), array("&", "&amp;"), $remove);

Для символа & в ссылках.

1
mschadegg 8 Янв 2014 в 00:18

Проблема в том, что XML искажен. Если бы вы исправили ошибку (добавив кавычки к значению свойства), это могло бы вызвать другие проблемы при чтении значения узла <programbeskrivelse>. SimpleXML проигнорирует теги внутри строки, сделав значение SOME TEXT. Значение этого узла, скорее всего, должно быть в пределах CDATA. Вы можете обнаружить теги в строках и заключить значение узла в CDATA, но это может быть сложно. Навскидку не могу придумать быстрого решения.

0
Crashspeeder 7 Янв 2014 в 18:36