2011-07-27 20 views
0

私は単純なxmlに問題があり、それを変数として割り当てています。私は、変数の形で結果を必要とするシンプルなXML PHPが助けを必要とする

<?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'; 
$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です:

は、ここに私のコードです。私はこの1つを試してみて、エラー

$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

はあなたのループのためにタイプミスをしました:

foreach($xml->item as $item) 
{ 
    foreach($item->attributes() as $a => $b) 
    { 
     $attr[ $a ] = $b; 
    } 
} 
を:あなたができるようさておき、$ XMLベース>項目は、foreachのをサポートしていたよう for($i=0;i<=$cnt;$i++) {for($i=0;i<$cnt;$i++) {(なし =

する必要があります

これはネイティブに言語構造を扱う利点があり、countの必要性を避け、<=の誤字の可能性を完全に回避します。

また、「id」属性を持つノードが複数ある場合は、1つだけが$attrになります。これが必要なものなら、それは問題ありませんが、気づかないと頭痛を引き起こす可能性があります。

関連する問題