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

问题描述 投票:1回答:3

我想在显示它之前加载html,找到一个标签并添加一个属性。

我试过了:

libxml_use_internal_errors(true);

$domDocument->loadHTML("<html><body>Test<br></body></html>");
$domElement = $domDocument->getElementsByTagName('body');

foreach ($domElement as $formula) {
    $formula->nodeValue->createAttribute('name')->value = 'attributevalue';
}

libxml_use_internal_errors(false);

但我有这个错误:

在字符串上调用成员函数createAttribute()

你有解决方案吗?

最好的祝福

php html attributes element
3个回答
1
投票

nodeValue返回String类型,这不是创建属性的方法。

事实上,节点的类型是DOMElement,因此您需要将该属性设置为与以下代码类似:

<?php
$domDocument = new DOMDocument();
$domDocument->loadHTML("<html><body>Test<br></body></html>");
$domElement = $domDocument->getElementsByTagName('body');
foreach ($domElement as $formula) {
    $formula->setAttribute("name", "attributevalue");
}
?>

1
投票

这是一个可能的解决方案,其中使用setAttribute而不是创建。虽然我不确定循环的目的,因为通常只有1个body标签。

libxml_use_internal_errors(true);

$domDocument->loadHTML("<html><body>Test<br></body></html>");
$domElement = $domDocument->getElementsByTagName('body');

foreach ($domElement as $formula) {
    $formula->setAttribute('name', 'thevalue');
}

libxml_use_internal_errors(false);

0
投票

试试吧

libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br></body></html>");
$domElements = $doc->getElementsByTagName('body');
foreach ($domElements as $domElement) {
    $domAttribute = $doc->createAttribute('name');
    $domAttribute->value = 'attributevalue';
    $domElement->appendChild($domAttribute);
    print_r($domElement->getAttribute('name'));
    // returns attributevalue
}
libxml_use_internal_errors(false);

尝试一下@PHP-Sandbox

© www.soinside.com 2019 - 2024. All rights reserved.