2015-04-12 6 views
0

На самом деле я застрял в запуске цикла foreach через простой XML-документ. Документ выглядит так:PHP simpleXML - цикл цикла foreach

<outfits> 
    <outfit default="1" skin="0xFCDBBA" species="stud"> 
     <head url="http://assets.zwinky.com/assets/stud/heads/01/head1" c="0xF2B38A" c2="0xffffff" z="33000"/> 
     <face url="http://assets.zwinky.com/assets/stud/faces/01/stud3" c="0x996633" c2="0xffffff" z="34000"/> 
     <midsection url="http://assets.zwinky.com/assets/stud/midsections/01/ms1" z="9000"/> 
     <leg url="http://assets.zwinky.com/assets/stud/legs/01/legs1" z="10000"/> 
     <hair url="http://assets.zwinky.com/assets/stud/hair/01/hr11" c="0x5C1C01" c2="0xffffff" z="37000"/> 
    </outfit> 
</outfits> 

Поэтому я стараюсь, чтобы каждый узел был единственным элементом.

Мой код:

$xml = simplexml_load_file($outfitUrl); 

foreach($xml->outfit->children() as $item) { 
    echo $item; 
} 

К сожалению ничего не будет отображаться.

+1

ли 'Эхо $ item-> asXML();'. – chris85

+1

Не удается выполнить эхо, используйте 'print_r ($ item)', вы можете увидеть атрибуты, затем вы можете использовать '-> attributes()'. –

+0

грустно, действительно. также, к сожалению, вы не разделили то, что вам не хватает на выходе, и почему вы ожидали его там. – hakre

ответ

0

Выходной сигнал вашего кода, как и следовало ожидать, так как узлы пустые
(хотя у них есть данные, хранящиеся внутри атрибутов):

<leg url="http://assets.zwinky.com/assets/stud/legs/01/legs1" z="10000"/> 

Если это имело значение, то оно будет выглядеть следующим образом , и было бы вторит код:

<leg url="http://someurl" z="10000">This is a node value.</leg> 

Если вы хотите, чтобы получить атрибуты этих узлов, вам нужен второй foreach -loop:

$xml = simplexml_load_string($x); // assume XML in $x 

foreach ($xml->outfit->children() as $item) { 

    // this loop will display all attributes of the current node: 
    foreach ($item->attributes() as $att => $attvalue) 
     echo "$att: $attvalue" . PHP_EOL; 

} 

видеть, что это работает: https://eval.in/312473

Если вы знаете имена атрибутов, которые вы хотите, вы можете получить доступ к ним непосредственно:

foreach ($xml->outfit->children() as $item) { 

    echo $item['url'] . PHP_EOL; 

} 

Если вы даже знаете имена узлов, которые вы хотите, вы можете ...

foreach ($xml->outfit as $outfit) { 

    echo $outfit['species'] . PHP_EOL; 
    echo $outfit->hair['url'] . PHP_EOL; 
    echo $outfit->face['url'] . PHP_EPÖ; 
    // etc. 

} 

см PHP руководство для намеков: http://php.net/manual/en/simplexml.examples-basic.php