2012-10-26 24 views
0

我一直在研究涉及PHP和XML的小型項目, 我遇到的困難來自訪問節點中的屬性。PHP,XML - 理解如何訪問屬性的問題

這裏是從節點訪問的屬性的一個示例:

<?php 
$string = <<<XML 
<a> 
<foo name="one" game="lonely">1</foo> 
</a> 
XML; 

$xml = simplexml_load_string($string); 

foreach ($xml->foo[0]->attributes() as $a => $b) { 
    echo $a,'="',$b,"\"\n"; 
} 
?> 

在上面的代碼中,我似乎無法理解foo[0]位。 例如,我很困惑你爲什麼必須做foo[0]->att... 而不是隻有foo->att...

謝謝您的時間, 邁克爾 - 米切爾

回答

0

表達式$xml->foo允許遍歷$xml中節點的所有子元素<foo>。這可以是零個或多個子節點:

foreach ($xml->foo as $foo) 
{ 
    echo "<foo>\n"; 
    foreach ($foo->attributes() as $name => $value) { 
     echo "$name=\"$value\"\n"; 
    } 
} 

因此,如果您只需要一個特定的所有這些零個或多個元素,你需要指定你的意思是哪一個。這可以通過添加陣列支架來完成,它是從零開始的位置,這裏$xml->foo[0]

$foo = $xml->foo[0]; 
echo "<foo>\n"; 
foreach ($foo->attributes() as $name => $value) { 
    echo "$name=\"$value\"\n"; 
} 
+0

因此,通過使用富[0]要指定的第一個'foo'節點。謝謝 – MichaelMitchell

+0

是的,但我實際上只是雙重檢查,我的答案是不正確/完整。在你的例子中,你也可以使用'$ xml-> foo'作爲第一個元素。就像那個,它已經爲你完成了工作,但是如果有更多的元素,你需要指定:http://codepad.org/1OWxsDxU – hakre

+0

另一個foreach演示:http://codepad.org/JuZbuTqY – hakre

0

可能有多個FOO元素。你正在獲得第一個。