使用XMLReader正确处理XML文件


Correctly processing XML files using XMLReader

为了个人使用,我目前正在编写一个递归PHP函数,该函数应该处理大量相对较大的XML文件。由于我只需要2-3个节点的值,我寻找了一种方法来尽可能节省内存和流量。因此,我偶然发现了PHP对象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参数以包括父节点

欢迎任何提示。:)

您正在使用

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

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