Корректная обработка файлов XML с использованием XMLReader - PullRequest
0 голосов
/ 20 февраля 2012

Для личного использования в настоящее время я пишу рекурсивную функцию PHP, которая должна обрабатывать большое количество относительно больших файлов XML.Поскольку мне нужно всего лишь 2-3 узла, я искал способ сделать это максимально экономящим память и трафик.Поэтому я наткнулся на PHP Object XMLReader, который работает не совсем так, как ожидалось, и не очень хорошо документирован на PHP.net.Мой текущий код выглядит следующим образом:

<?php
    $reader = new XMLReader();
    $reader->open('http://path.to.xml/file', 'UTF-8');
    $att1 = $reader->getAttribute('att1');
    $att2 = $reader->getAttribute('att2');
    $reader->close();
    echo var_dump($att1) . ' ' . var_dump($att2);
?>

Как вы можете видеть, это чистая отладка, но она просто выводит NULL два раза, что, в соответствии с документацией, имеет место "если нет атрибута симя [найдено] найдено или [...] расположено на узле элемента. "

Структура XML (фактический файл больше 500 строк, но иногда также содержит теги CDATA):

<parentnode>
    <att1><![CDATA[ VAL1 ]]></att1>
    <randomtags>randomval</randomtags>
    <att2>VAL2</att2>
    <foo>bar</foo>
</parentnode>

У меня почти нет опыта работы с XML, и ранее я использовал SimpleXML только один раз.Я не хочу анализировать весь файл, только эти два значения.

Что я уже пробовал:

  • , включающий параметр getAttribute в <и> *
  • , статически вызывающий методы getAttribute
  • , изменяющий параметр getAttribute навключать родительский узел несколькими способами

Любые советы или подсказки приветствуются.:)

1 Ответ

2 голосов
/ 20 февраля 2012

Вы используете

$att1 = $reader->getAttribute('att1'); 

, но в вашем XML-определении att1 и att2 являются элементами, а не атрибутами

...