Search code examples
phpxmlsimplexml

simplexml get value not all attributes


i am not very familiar with php (just start learning) and i have a problem: i have a xml file on a server (from eve ... but who cares) and i managed it to "read" this file. it has a structure like this:

<result>
     <rowset>
          <row name="abc" id="def" ...>
          <row name="abc" id="def" ...>
          <row name="abc" id="def" ...>
          ...
     </rowset>
</result>

searching some web pages i found a way to echo all attributes of all rows. here is my code:

<?php
$url = "http://api.eveonline.com/eve/AllianceList.xml.aspx?version=1";

$xml = simplexml_load_file($url);

$nrOfRows = $xml->result[0]->rowset[0]->count();
$n = 0;

for ($n = 0; $n <= $nrOfRows; $n++) {
    foreach($xml->result[0]->rowset[0]->row[$n]->attributes() as $a => $b) {
        echo $a, " = ", $b, "<br>";
    }
}
?>

as a result i get:

name = abc
id = def
...
name = abc
id = def
...

this looks nice but thats not exactly what i want. i only need a special attribute of all rows. for example i want all the names of all rows as result.

thanks for any help. sariel


Solution

  • You can use array syntax to access to a single attribute:

    echo $xml->result[0]->rowset[0]->row[$n]['name'];
    

    will output:

    Goonswarm Federation
    Pandemic Horde
    Test Alliance Please Ignore
    (...)
    

    Also note that you can simplify your code in this way:

    foreach( $xml->result[0]->rowset[0]->row as $row )
    {
        echo $row['name'] . '<br>';
    }