DOM возвращает пустой объект - PullRequest
3 голосов
/ 31 января 2012

Это мой код:

<code><?php
$content = utf8_encode( file_get_contents( "data.xml") );
$XML = new DOMDocument();
$XML->loadXML($content);

echo "<pre>" . print_r($XML, 1) . "
";?>

Он возвращает:

 DOMDocument Object
(
)

Я прочитал ошибку или что-то в этом роде,поскольку и var_dump, и print_r, или любой другой вернут пустой элемент объекта.

http://www.php.net/manual/en/class.domelement.php#86224

Этот парень дал решение для лучшего использования:

<code>$xml = $XML->saveXML($XML);
echo "<pre>" . print_r($xml, 1) . "
";

Но потом, когда я перезагружаю страницу, похоже, что есть только пробелы, потому что я ничего не вижу, но я могу выбрать это ...

В чем проблема, есть ли у вас, ребята, какие-то решения для этого?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2013

У меня возникла такая же проблема. Кажется, что код проверки HTML очень чувствителен к ошибкам. Если вы включите предупреждения, вы, вероятно, увидите кучу предупреждений при загрузке HTML-контента (по крайней мере, так было при загрузке удаленной страницы).

Я обнаружил, что он особенно зацикливается на объектах HTML. Похоже, что он попал в теги HTML, скомпилированные в javascript.

Я попытался взломать его, заменив & на &amp;, чтобы посмотреть, смогу ли я вернуть правильно проанализированный объект. Я продолжал получать ошибки на JS, хотя.

По сути, убедитесь, что вы видите вывод отладочной информации, и проверьте наличие предупреждений. Содержание может оказаться проблемой здесь.

Edit: Я немного поискал и нашел эту библиотеку, которая, кажется, работает очень похоже на DOMDocument, но, похоже, не взрывается при небольших проблемах в HTML: http://simplehtmldom.sourceforge.net/

Мне удалось загрузить веб-страницу, в которой возникли проблемы с -without error. Может быть стоит попробовать в ваших будущих проектах.

0 голосов
/ 29 ноября 2013

То, что автор забыл добавить, было htmlspecialchars():

<code>$xml = $XML->saveXML($XML);
echo "<pre>", htmlspecialchars($xml, ENT_QUOTES, 'UTF-8'), "
";

Без него вывод XML не будет экранирован, и вы не увидите теги.

0 голосов
/ 21 августа 2012

A var_dump on DOMDocument всегда возвращает пустой объект.

Иллюстрация:

$xml = simplexml_load_file('test.xml'); //load your xml

var_dump($xml); //var_dump via SimpleXML (lot of data)

$doc = new DOMDocument(); //fire up domdocument

$xmlstring = $xml->asXML(); //convert SimpleXML to string

$doc->loadXML($xmlstring);  //loads perfectly 

var_dump($doc); //empty object

Может быть, вы должны рассмотреть SimpleXML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...