使用SimpleXML时如何获取对象名称?

时间:2009-10-06 20:03:42

标签: php simplexml

如果格式如下,其中c是我必须在每次迭代中预设的对象数组:

$a->b->c

我做了:

$z = $a->b
foreach($z as $key => $value)
echo $value['field'];

$ key出现为null,即使我有有效值。如何获取对象的名称?

2 个答案:

答案 0 :(得分:6)

XML:

<a>
  <b>
    <c />
    <d />
    <e />
  </b>
</a>

PHP代码:

$xml = new SimpleXMLElement($file_url, true);
foreach($xml->b->children() as $node) {
    echo $node->getName() . "\n";
}

会给你:

c
d
b

有关详细信息,请参阅PHP's manual

答案 1 :(得分:2)

考虑以下XML和使用SimpleXML加载它的代码:

$str = <<<XML
<root>
    <a>
        <b>
            <c>glop</c>
            <d>test</d>
        </b>
    </a>
</root>
XML;
$xml = simplexml_load_string($str);

您可以将$xml->a->b“投射”到数组中,以便能够迭代它:

foreach ((array)$xml->a->b as $name => $value) {
    echo "$name : $value<br />";
}

你会得到这种输出:

c : glop
d : test

(可能与您的XML字符串不完全相同,但我希望这可以帮助您找到解决方案 - 如果有,您可以编辑您的问题以向您显示XML数据,并输出您愿意得到吗?)

Converting to array section

上引用手册页
  

如果将对象转换为数组,   结果是一个数组的元素   是对象的属性。
键   是成员变量名,带有   几个值得注意的例外:整数   物业是无法进入的;私人的   变量具有类名   前置于变量名称;   受保护的变量有'*'   前缀为变量名。