遍历simplexml节点列表的对象变量的说明

时间:2012-10-23 18:42:16

标签: php xml

我有这个

$xml = new SimpleXMLElement($output);
$names = $xml->param->value->array->data;

这是输出

SimpleXMLElement Object
(
[value] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [struct] => SimpleXMLElement Object
                    (
                        [member] => SimpleXMLElement Object
                            (
                                [name] => school
                                [value] => SimpleXMLElement Object
                                    (
                                        [struct] => SimpleXMLElement Object
                                            (
                                                [member] => Array
                                                    (
                                                        [0] => SimpleXMLElement Object
                                                            (
                                                                [name] => schoolid
                                                                [value] => SimpleXMLElement Object
                                                                    (
                                                                        [string] => 49961
                                                                    )

                                                            )

                                                        [1] => SimpleXMLElement Object
                                                            (
                                                                [name] => schoolname
                                                                [value] => SimpleXMLElement Object
                                                                    (
                                                                        [string] => Millersville Elementary School
                                                                    )

                                                            )

我正试图获得“schoolname”值

使用

for($i=0;$i<count($names);$i++) {
    echo $names[0][$i]->struct->member->value->struct->member[0]->value.'<br>';
}

我也尝试过字符串($ names [0]等)而没有成功。我想我在开头用$ names [0] [$ i] ??

搞乱了订单

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:6)

如果你感到懒惰,请考虑learning XPath。这是解决问题的简单方法,如果你不想通过 - &gt;的永无止境的条纹来解决它:)

学习XPath也是一项投资。当您处理XML时,您需要了解它。 这是XML或DOM的SQL (参见 DOMXPath )。

我知道这不是一个真正的答案,但是花一些时间和我在这里指出的是值得的,也会解决你的问题。

答案 1 :(得分:1)

以下是使用xpath获取fieldname和values

的解决方案
$cols = $xml->xpath('//member/value/struct/member/name');
$names = $xml->xpath('//member/value/struct/member/value/*');
for($i=0;$i<count($cols);$i++) {
echo $cols[$i].' = '.$names[$i].'<br>';
}
对于处理xml的人来说,xpath是必须的!

答案 2 :(得分:0)

结果$ name是valuse(对象和数组)的混合。

尝试将$ name转换为仅对象或仅转换为数组。

您发布的示例不完整,无法尝试搜索它。

答案 3 :(得分:0)

我最近有一个类似的问题,我最后写了一些东西,将整个结构扁平化为数组中的数组,更加可追溯,但对于手头的问题,我经常发现每个阶段和构建对var_dump / print_r都有帮助它逐级升级。

$ names是一个对象,所以在我看来你想要的引用是:

$names->value[0]->struct->member->value->struct->member['value'][1]->value;

编辑:我现在忽略了循环部分,因为我认为你需要重新计算你的count(),它似乎需要计数($ names-&gt; value),这是数组学校如果我是正确的,在这种情况下,$i将进入第一个[0]