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_ERRRaised 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');