如何使用 PHP DomDocument 获取规范值?

Posted

技术标签:

【中文标题】如何使用 PHP DomDocument 获取规范值?【英文标题】:How do I obtain the canonical value using PHP DomDocument? 【发布时间】:2012-07-08 03:28:31 【问题描述】:
<link rel='canonical' href='http://test.com/asdfsdf/sdf/' />

我需要使用 Dom 获取规范的 href 值。我该怎么做?

【问题讨论】:

php.net/manual/en/book.dom.php 【参考方案1】:

有多种方法可以做到这一点。

使用 XML:

<?php

$html = "<link rel='canonical' href='http://test.com/asdfsdf/sdf/' />";

$xml  = simplexml_load_string($html);
$attr = $xml->attributes();
print_r($attr);

?>

哪个输出:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [rel] => canonical
            [href] => http://test.com/asdfsdf/sdf/
        )

)

或者,使用 Dom:

<?php

$html = "<link rel='canonical' href='http://test.com/asdfsdf/sdf/' />";

$dom = new DOMDocument;
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('link');
foreach ($nodes as $node)

    if ($node->getAttribute('rel') === 'canonical')
    
        echo($node->getAttribute('href'));
    


?>

哪个输出:

http://test.com/asdfsdf/sdf/

在这两个示例中,如果您要解析整个 HTML 文件,则需要更多代码,但它们演示了您需要的大部分结构。

从this answer 和the documentation on Dom 修改的代码。

【讨论】:

foreach ($doc-&gt;getElementsByTagName('link') as $item) if ($item-&gt;getAttribute('rel') === 'canonical') echo $item-&gt;getAttribute('href'); 看起来你已经掌握了。我稍微调整了你的代码并更新了我的答案。 感谢您提供new DOMDocument; 替代方案!

以上是关于如何使用 PHP DomDocument 获取规范值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 的 DOMDocument 获取元素的序列化 HTML?

使用 DOMDocument PHP 获取 Xpath 父节点?

如何在 PHP 中将 XML 字符串转换为 DOMDocument?

PHP - DOMDocument/DOMConfiguration

PHP DOMDocument 添加了额外的标签

PHP DOMDocument获取标签的属性