2011-07-27 82 views
0

我遇到了简单的XML的问题,把它分配为变量。简单的XML PHP需要帮助

这里是我的代码:

$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 

请帮助。由于

+0

你能发布你的XML吗? –

+0

xml发布! :)。 – Jorge

回答

3

您在已经错字您的for循环:for($i=0;i<=$cnt;$i++) {应该for($i=0;i<$cnt;$i++) {(无=

顺便说一句,$ XML->项目支持的foreach,那么你可以这样做:

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

这有利于在本地使用语言结构,它避免了对count的需求,并且它完全避免了排字错误的可能性。另外,就像一个人站起来一样,如果你有多个具有“id”属性的节点,那么只有一个节点最终会在$attr中结束。如果这是你需要的,那很好,但如果你没有注意到它会导致头痛。