为了个人使用,我目前正在编写一个递归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是元素,而不是属性