0

我有这个

$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
                                                                    )

                                                            )

我正在尝试获取“学校名称”值

使用

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

我也试过 string($names[0]etc.) 没有成功。我想我一开始就用 $names[0][$i] 搞乱了顺序??

任何帮助深表感谢!

4

4 回答 4

6

如果您觉得懒惰,可以考虑学习 XPath 。如果您不想以永无止境的 -> 的连续性来解决问题,这是解决问题的简单方法:)

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

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

于 2012-10-23T18:47:48.030 回答
1

这是使用 xpath 获取字段名和值的解决方案

$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>';
}

xpath 对于任何处理 xml 的人来说都是必须的!

于 2012-10-23T20:10:11.597 回答
0

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

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

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

于 2012-10-23T18:53:46.623 回答
0

我最近有一个类似的问题,我最终写了一些东西,将整个结构扁平化为数组中的数组,更易于遍历,但就手头的问题而言,我经常发现 var_dump/print_r 每个阶段都有帮助并建立它按级别。

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

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

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

于 2012-10-23T18:56:51.787 回答