使用 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 DOM:更改现有 DOMDocument 的文档类型