简单的xml php需要帮助

时间:2011-07-27 01:56:50

标签: php simplexml

我在使用简单的xml时遇到问题,无法将其指定为变量。

这是我的代码:

$config = '../XML/config.xml';
$xml = simplexml_load_file($config);
$cnt = count($xml->children());

for($i=0;i<=$cnt;$i++) {
    foreach($xml->item[$i]->attributes() as $a => $b) {

        echo $a."<br />"; //result

    }
}

这是我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<portfolio tooltip="click to view">
    <item path="approvals/710.png" title="ASC Approval" description="Oct 25, 2010 approval letter from ASC." link="approvals/710.PDF" target="_blank" />
    <item path="approvals/711.png" title="Citi Approval" description="Nov 1, 2010 approval letter from CitiMortgage." link="approvals/711.PDF" target="_blank" />
    <item path="approvals/712.png" title="Citi / Freddie" description="Nov 9, 2010 approval letter from Freddie Mac for CitiMortgage." link="approvals/712.PDF" target="_blank" />
    <item path="approvals/713.png" title="BoA Approval" description="Nov 9, 2010 approval letter from Bank of America." link="approvals/713.PDF" target="_blank" />
    <item path="approvals/714.png" title="Pentagon" description="Nov 10, 2010 approval letter from Pentagon FCU." link="approvals/714.PDF" target="_blank" />
    <item path="approvals/715.png" title="PNC Approval" description="Nov 10, 2010 approval letter from PNC Mortgage." link="approvals/715.PDF" target="_blank" />
</portfolio>

我需要变量形式的结果。我试了一下这个错误

$config = '../XML/config.xml';
$attr = array();
$xml = simplexml_load_file($config);
$cnt = count($xml->children());

for($i=0;i<=$cnt;$i++) {
    foreach($xml->item[$i]->attributes() as $a => $b) {

        $attr[$a] = $b;

    }
}
echo "<pre>";
print_r($attr);
echo "</pre>";

但是我收到了这个错误

Fatal error: Call to a member function attributes() on a non-object in E:\xampp\htdocs\slide\admin\admin.php on line 51

请帮忙。感谢

1 个答案:

答案 0 :(得分:3)

你的for循环中有一个拼写错误:for($i=0;i<=$cnt;$i++) {应为for($i=0;i<$cnt;$i++) {(否=

另外,$ xml-&gt;项支持foreach,所以你可以这样做:

foreach( $xml->item as $item )
{
    foreach( $item->attributes() as $a => $b )
    {
        $attr[ $a ] = $b;
    }
}

这有利于本地使用语言结构,它避免了count的需要,并且它完全避免了<=错字的可能性。

此外,正如一个单挑,如果您有多个具有“id”属性的节点,则只有一个节点会以$attr结尾。如果这是你需要的,那很好,但如果你没有注意到它会引起头痛。