通过选择标签名称在 PHP 中创建属性
Create attribute in PHP by selecting tag name
我正在尝试加载 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);
但是我有这个错误:
Call to a member function createAttribute() on string
请问有解决办法吗?
此致
nodeValue returns 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");
}
?>
像这样尝试
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
这是一个可能的解决方案,其中使用 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);
我正在尝试加载 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);
但是我有这个错误:
Call to a member function createAttribute() on string
请问有解决办法吗?
此致
nodeValue returns 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");
}
?>
像这样尝试
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
这是一个可能的解决方案,其中使用 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);