【问题标题】:Change tag attribute value with PHP DOMDocument使用 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/”。这可能吗?

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

【问题讨论】:

    标签: php dom attributes tags domdocument


    【解决方案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 块将始终运行。
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 2018-03-22
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多