循环遍历XML中的属性

时间:2014-04-01 06:44:17

标签: php xml simplexml

我想使用simplexml循环遍历xml中的属性,但它不能很好地工作。

当我在浏览器中查看输出时,只输出一行。当我试图通过命令行运行脚本时,我收到以下错误消息:

  

PHP警告:在第11行的/var/www/test/index.php中为foreach()提供的参数无效

这是我的php代码:

#!/usr/bin/php
<?php
$xml = simplexml_load_file("test.xml");
for($i = 0; $i < 1000; $i++)
{
    foreach($xml->packet->proto[$i] as $a)
    {
        if($a->attributes() == "http.request.full_uri" || $a->attributes() == "ip.src")
        {
            echo $a->attributes() . ": " . $a->attributes()->showname . "<br>" ;
        }   
    }
}
?>

任何可以帮助我获取具有if子句中指定名称的所有属性的人吗?

1 个答案:

答案 0 :(得分:0)

你的问题在于:

for($i = 0; $i < 1000; $i++)

为什么要检查1000个$xml->packet->proto条目?看起来没有那么多。你应该在那里使用foreach - 像这样:

foreach($xml->packet->proto as $proto) {
    foreach($proto as $a) {
        // ...

我有点猜测你的XML是如何构建的,但希望这有助于指出你正确的方向。错误消息Invalid argument supplied for foreach()有点告诉您问题。这是因为你试图访问$xml->packet->proto[$i] $i是一个超出界限的索引,导致错误。