使用 PHP DOMDocument 更改标签属性值

Posted

技术标签:

【中文标题】使用 PHP DOMDocument 更改标签属性值【英文标题】:Change tag attribute value with PHP DOMDocument 【发布时间】:2012-07-08 10:05:23 【问题描述】:

我想用 php DOMDocument 更改标签的属性值。

例如,假设我们有这行 html

<a href="http://foo.bar/">Click here</a>

我在PHP中加载上述代码如下:

$dom = new domDocument;
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>');

我想使用 PHP 的 DOMDocument 扩展将“href”值更改为“http://google.com/”。这可能吗?

一如既往地感谢您的帮助!

【问题讨论】:

【参考方案1】:
$dom = new DOMDocument();
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>');

foreach ($dom->getElementsByTagName('a') as $item) 

    $item->setAttribute('href', 'http://google.com/');
    echo $dom->saveHTML();
    exit;

【讨论】:

我没有保存它。谢谢你的提示。让我们希望该库能够在 php 8 中运行。 请注意 $item 的类型为 DOMElement。按照文档和输入提示DOMNode,您不会在 IDE 中获得自动完成功能。【参考方案2】:
$dom = new domDocument;
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>');

$elements = $dom->getElementsByTagName( 'a' );

if($elements instanceof DOMNodeList)
    foreach($elements as $domElement)
        $domElement->setAttribute('href', 'http://www.google.com/');

【讨论】:

赞成,因为您包含了类型检查,但请记住,在类 C 语言中,总是将条件或循环的主体括在花括号中是个好主意,即使它只是一个语句(因为如果您稍后添加另一个语句并忘记添加大括号,它会看起来就像它是身体的一部分,而实际上它不是;这可能会导致非常难以 -发现错误)。 类型检查在这里实际上没什么用; DOMDocument::getElementsByTagName 始终返回 DOMNodeList,因此 if 块将始终运行。

以上是关于使用 PHP DOMDocument 更改标签属性值的主要内容,如果未能解决你的问题,请参考以下文章

PHP DOMDocument 添加了额外的标签

PHP DOM:更改现有 DOMDocument 的文档类型

PHP DomDocument - 自闭标签和特殊字符

如何使用 DOMDocument 编写 XML 自闭标签

html5-tags 上的 PHP DOMDocument 错误/警告

通过选择标记名称在PHP中创建属性