在DomDocument中操作节点并将其转换为数组

时间:2012-08-24 12:26:57

标签: php domdocument

我看起来像这样的XML:

<?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>

我想将这些项目放入php数组中。

到目前为止我已经完成了:

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

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

    $articles = array();

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

    var_dump($articles);

只返回数组中的1 <item>元素。这是逻辑,因为我告诉他->item(0)

那么如何选择所有项目以便将所有项目放入数组?

感谢。

2 个答案:

答案 0 :(得分:1)

您需要迭代$ nodes。

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

答案 1 :(得分:1)

使用$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);
}