PHP Conference Nagoya 2025

DOMElement::setAttribute

(PHP 5, PHP 7, PHP 8)

DOMElement::setAttribute属性を新しく追加する、または変更する

説明

public DOMElement::setAttribute(string $qualifiedName, string $value): DOMAttr|bool

qualifiedName という名前の属性を、指定した値に設定します。 属性が存在しない場合は、作成されます。

パラメータ

qualifiedName

属性の名前。

value

属性の値。

戻り値

新しく作られた、または変更された DOMAttr を返します。 エラーが発生した場合は false を返します。

エラー / 例外

DOM_NO_MODIFICATION_ALLOWED_ERR

ノードが読み込み専用の場合に発生します。

例1 属性を設定する

<?php
$doc
= new DOMDocument("1.0");
$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("align", "left");
?>

参考

add a note

User Contributed Notes 6 notes

up
13
Rakesh Verma - rakeshnsony at gmail dot com
14 years ago
<?php
//Store your html into $html variable.
$html="
<html>
<head>
<title>Untitled Document</title>
</head>

<body>
<a href='http://example.com'>Example</a><br>
<a href='http://google.com'>Google</a><br>

<a href='http://www.yahoo.com'>Yahoo</a><br>
</body>

</html>"
;

$dom = new DOMDocument();
$dom->loadHTML($html);

//Evaluate Anchor tag in HTML
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

for (
$i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');

//remove and set target attribute
$href->removeAttribute('target');
$href->setAttribute("target", "_blank");

$newURL=$url."/newurl";

//remove and set href attribute
$href->removeAttribute('href');
$href->setAttribute("href", $newURL);
}

// save html
$html=$dom->saveHTML();

echo
$html;

?>
up
2
lehal2@hotmail
11 years ago
The use of Dom to first remove and then add the width and height to the first img tag from the text.I hope it help you to save your time
<?php
$html
= '

<img src="http://www.example.com/images/header.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
<img src="http://www.example.com/images/header2.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
'
;

$doc = DOMDocument::loadHTML($html);
$c =0;
foreach(
$doc->getElementsByTagName('img') as $image){
if (
$c>0) continue;
foreach(array(
'width', 'height') as $attribute_to_remove){
echo
$attribute_to_remove;
if(
$image->hasAttribute($attribute_to_remove)){
$image->removeAttribute($attribute_to_remove);

}
if(
$attribute_to_remove=='height'){
if(!
$image->hasAttribute($attribute_to_remove)){
$image->setAttribute($attribute_to_remove,'220');

}}
if(
$attribute_to_remove=='width'){
if(!
$image->hasAttribute($attribute_to_remove)){
$image->setAttribute($attribute_to_remove,'700');

}}
$c = $c+1;
}
}
echo
$doc->saveHTML();
up
1
info at ensostudio dot ru
3 years ago
Solution to render HTML 5 tags with attributes with/without value:
<?php
$dom
= new DOMImplementation();
$doc = $dom->createDocument(null, 'html', $dom->createDocumentType('html'));

$tag = $doc->appendChild($doc->createElement('input'));
$tag->setAttribute('type', 'text');
$tag->setAttribute('disabled', '');

echo
$doc->saveHTML($tag); // <input type="text" disabled="">

$doc->normalize(); // normalize attributes
echo $doc->saveHTML($tag); // <input type="text" disabled>
?>
up
2
address at gmail dot com
16 years ago
If wanting to set an attribute of an element with unique id of "1"

<?php
$dom
= new DomDocument();
$dom->load('test.xml');
$xp = new DomXPath($dom);
$res = $xp->query("//*[@id = '1']");
$res->item(0)->setAttribute('title','2');
$dom->save('test.xml');
?>
up
-4
karvjorm at users.sourceforge.net
17 years ago
$dom = new DomDocument('1.0','iso-8859-15');

$ht_ml = $dom->appendChild($dom->createElement('html'));
$ht_ml->setAttribute('xmlns','http://www.w3.org/1999/xhtml');
$ht_ml->setAttribute('xml:lang','fi');
$ht_ml->setAttribute('lang','fi');

Result:

<?xml version="1.0" encoding="iso-8859-15"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">
up
-5
Vasil Rangelov
17 years ago
@karvjorm,
Using this method is not exactly a good practice. Infact, I think it may be a bug.
Names beginning with "xml" are reserved (for namespaces in this case).
setAttribute() should return false in this case I think, but I suppose it doesn't.

Still, the right way to do it is with createElementNS().
It lets you specify the namespace when creating the element node.

So the equivalent to yours ($html added to allow word wrapping) is:

$dom = new DomDocument('1.0','iso-8859-15');
$html = $dom->createElementNS('http://www.w3.org/1999/xhtml', 'html');
$ht_ml = $dom->appendChild($html);
$ht_ml->setAttribute('xml:lang','fi');
$ht_ml->setAttribute('lang','fi');
To Top