doxzrb8721 2011-07-27 01:56
浏览 44
已采纳

简单的xml php需要帮助

I'm having trouble with simple xml to assign it as variable.

Here is my code:

$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

    }
}

Here is my 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>

I need the result in a variable form. I try this one and got an error

$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>";

But I got this error

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

Please help. Thanks

  • 写回答

1条回答 默认 最新

  • douxianwu2221 2011-07-27 02:46
    关注

    You've a typo in your for loop: for($i=0;i<=$cnt;$i++) { should be for($i=0;i<$cnt;$i++) { (no =)

    As an aside, $xml->item supports foreach, so you could do:

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

    This has the benefit of working with the language constructs natively, it avoids the need for count, and it completely avoids the possibility of a <= typo.

    Also, just as a heads up, if you have multiple nodes with an "id" attribute, only one will end up in $attr. If this is what you need, that's fine, but it is something which can cause headache if you don't notice it.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色