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

标签 php domdocument

我正在使用 PHP DomDocument 并试图抓取如下所示的内容:

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

它也可以是这样的:

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

我想获取页面上的所有 itemprop='n' 并将它们放入一个数组中以存储它们的节点值和关联的 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 :调用未定义的方法 DOMDocument::getAttribute()

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

感谢大家的帮助!

最佳答案

您需要先使用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

关于php - 获取所有具有 itemprop 属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755673/

相关文章:

php - 如何检查前一个节点是否带有特定标签?

php - Artisan::call ('migrate' ) 将 Laravel 升级到 4.2 后无法正常工作

php - 在 cron 作业中执行 PHP 脚本

php - PHP 的 DOMXPath 中是否需要 registerNamespace?

PHP DOMDocument removeChild() 仅删除目标类的第一个实例

symfony - 注意:未定义的属性:DOMDocument::$documentElement

php - 扩展 DOMDocument 和 DOMNode : problem with return object

php - 在构造函数调用时设置对象属性 (PHP)

php - MySQL 只返回最后插入的行

php - UTF-8、PHP 和 XML Mysql