获取具有itemprop属性的所有元素

时间:2013-05-26 02:23:40

标签: php domdocument

我正在使用PHP DomDocument并尝试删除看起来像这样的内容:

<div itemprop='movie'>Fight Club</div>

它看起来也像这样:

<span itemprop='musician'>Ozzy Osbourne</span>

我想抓取页面上的所有itemprop='n'并将它们放入一个数组中以存储它们的nodevalue和相关的itemprop名称。到目前为止我的代码看起来像这样:

function getItemprops(){
        foreach($this->dom->getAttribute("itemprop") as $buffer) {
                $itempropList = array(
                    'theNodeValue' => $buffer->nodeValue,
                    'theItemprop'  => $buffer->getAttribute("itemprop")
                )
                return $itempropList;
        }
}

我的代码应该在以下某处获得一个数组:

array (
      array(
         0 =>
              "theNodeValue" => "Fight Club",
              "theItemprop"  => "movie"
         1 =>
              "theNodeValue" => "Fight Club",
              "theItemprop"  => "movie"
      )
)

不幸的是,我的代码返回Fatal error: Call to undefined method DOMDocument::getAttribute()

所以基本上,我想选择所有itemprop=""并将它们放在数组中。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您需要先使用XPath选择具有所需属性的所有节点,然后循环返回返回的节点以获取文本值和属性值;像这样

$d = new DOMDocument();
$d->loadHTML($xmlsource);
$xpath = new DOMXPath($d);
$nodes = $xpath->query('//*[@itemprop]');  //this catches all elements with itemprop attribute
foreach ($nodes as $node) { 
   // do your stuff here with $node