simplexml_load_file не может загрузить файл XML - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь выполнить очень простой анализ XML-данных, но с треском проваливаюсь.

У меня есть файл metadata.xml как таковой:

<?xml version="1.0" encoding="UTF-8" ?>
<metadata>
    <page>
        <filename>products.php</filename>
        <title>Best selection of products in Anytown, USA</title>
        <description>We sell quality products</description>
    </page>
    <page>
        <filename>services.com</filename>
        <title>Great services anywhere within Anytown</title>
        <description>Our services are pretty good</description>
    </page>
</metadata>

Я пытаюсь получить результат для конкретной записи XML, используя код ниже:

<?php

$str = simplexml_load_file("metadata.xml") or die("Couldn't load file");

$data = new SimpleXMLElement($str);
// Find the element with specific filename
$nodes = $data->xpath('//metadata/page/filename[.="products.php"]/parent::*');
$result = $nodes[0];
echo "Title: " . $result->title . "\n";
echo "Description: " . $result->description . "\n";

?>

Это приводит к ошибке:

Предупреждение: SimpleXMLElement :: __ construct (): Сущность: строка 4: ошибка синтаксического анализатора: ожидается начальный тег, «<» не найдено в /var/www/html/php_xml_test.php в строке 10 </p>

Неустранимая ошибка: необработанное исключение: строка не может быть проанализирована как XML в /var/www/html/php_xml_test.php:10 Трассировка стека: # 0 /var/www/html/php_xml_test.php(10): SimpleXMLElement- > __ construct ('\ n \ t \ n \ t \ n') # 1 {main} добавлено в /var/www/html/php_xml_test.php в строку 10

Если я загружаю содержимое файла XML прямо в файл php, все работает нормально.

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

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Согласно http://php.net/manual/en/simplexmlelement.construct.php я изменил код так:

<?php

$data = new SimpleXMLElement('metadata.xml', 0, TRUE);
// Find the element with specific filename
$nodes = $data->xpath('//metadata/page/filename[.="services.php"]/parent::*');
$result = $nodes[0];
echo "Title: " . $result->title . "\n";
echo "Description: " . $result->description . "\n";

?>
...