DOMElement::setAttribute
(PHP 5, PHP 7, PHP 8)
DOMElement::setAttribute — Adds new or modifies existing attribute
说明
Sets an attribute with name qualifiedName
to the given
value. If the attribute does not exist, it will be created.
参数
-
qualifiedName
-
The name of the attribute.
-
value
-
The value of the attribute.
返回值
The created or modified DOMAttr or false
if an error occurred.
错误/异常
-
DOM_NO_MODIFICATION_ALLOWED_ERR
-
Raised if the node is readonly.
范例
示例 #1 Setting an attribute
<?php
$doc = new DOMDocument("1.0");
$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("align", "left");
?>
参见
- DOMElement::hasAttribute() - Checks to see if attribute exists
- DOMElement::getAttribute() - Returns value of attribute
- DOMElement::removeAttribute() - Removes attribute

User Contributed Notes 6 notes
Rakesh Verma - rakeshnsony at gmail dot com ¶
11 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;
?>
info at ensostudio dot ru ¶
6 months 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>
?>
address at gmail dot com ¶
13 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');
?>
lehal2@hotmail ¶
9 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();
karvjorm at users.sourceforge.net ¶
15 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">
Vasil Rangelov ¶
14 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');
备份地址:http://www.lvesu.com/blog/php/domelement.setattribute.php