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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过选择标记名称在PHP中创建属性相关的知识,希望对你有一定的参考价值。

我想在显示它之前加载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()

你有解决方案吗?

最好的祝福

答案

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");
}
?>
另一答案

这是一个可能的解决方案,其中使用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);
另一答案

试试吧

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

以上是关于通过选择标记名称在PHP中创建属性的主要内容,如果未能解决你的问题,请参考以下文章

在片段中创建日期选择器

php类的定义

如何通过代码在 Anylogic 中创建路径空间标记元素

在laravel应用程序中创建动态元标记

php 在Drupal 8中创建自定义标记

在 Redshift 中创建视图时选择列的名称