sf_tristanb
sf_tristanb

Reputation: 8855

Manipulating nodes in DomDocument and transform it into an array

I've an XML looking this way :

<?xml version="1.0" ?>
<rss version="2.0">
  <channel>
      <title>get_news_category</title>
    <item>
        <id>10502</id>
        <title>Cheesecake</title>
        <summary>SummaryBlahblah</summary>
    </item>
    <item>
        <id>13236</id>
        <title>Moto</title>
        <summary>summary blahblah</summary>
    </item>

And I want to put the items into an php array.

I've done so far:

    $nodes = $dom->getElementsByTagName('item')->item(0);

    $values = $nodes->getElementsByTagName("*");

    $articles = array();

    foreach ($values as $node) {
      $articles[$node->nodeName] = $node->nodeValue;
    }

    var_dump($articles);

Which only returns me in an array, the 1 <item> element. which is logic because i told him ->item(0).

So how to select all the items in order to put all the items into an array ?

Thanks.

Upvotes: 0

Views: 107

Answers (2)

Mihai Iorga
Mihai Iorga

Reputation: 39704

use $nodes->length

$dom = new DOMDocument();
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('item');

for($i=0; $i<$nodes->length; $i++){

    $values = $nodes->item($i)->getElementsByTagName("*");

    $articles = array();

    foreach ($values as $num => $node) {
        $articles[$i][$node->nodeName] = $node->nodeValue;
    }

    var_dump($articles);
}

Upvotes: 1

Daniel
Daniel

Reputation: 3806

You need to iterate the $nodes.

$nodes = $dom->getElementsByTagName('item');
for ($i = 0; $i < $nodes->length; $i++)
{
     // Lets grab the node
     $values = $nodes->item($i)->getElementsByTagName("*");
}

Upvotes: 1

Related Questions