DOMElement::setAttribute()
(PHP 5, PHP 7)
Adds new attribute
说明
public DOMElement::setAttribute(string $name,string $value): DOMAttr
Sets an attribute with name$nameto the given value. If the attribute does not exist, it will be created.
参数
- $name
The name of the attribute.
- $value
The value of the attribute.
返回值
The new DOMAttr or FALSE
if an error occurred.
错误/异常
DOM_NO_MODIFICATION_ALLOWED_ERR
Raised if the node is readonly.
范例
Example #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
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'); ?>
<?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; ?>
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();
$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">
@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');