使用XMLReader正确处理XML文件

时间:2012-02-20 16:44:07

标签: php xml xmlreader

供个人使用我目前正在编写一个递归的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参数封装在&lt;和&gt;
  • 静态调用getAttribute方法
  • 更改getAttribute参数以多种方式包含父节点

欢迎任何提示或提示。 :)

1 个答案:

答案 0 :(得分:2)

你正在使用

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

但是在你的XML定义中,att1和att2是元素,而不是属性