html
(PHP 5, PHP 7, PHP 8)
DOMElement::setAttribute — Adds new or modifies existing attribute
Sets an attribute with name
qualifiedName
to the guiven
value. If the attribute does not exist, it will be created.
qualifiedName
The name of the attribute.
value
The value of the attribute.
Example #1 Setting an attribute
<?php
$doc
= new
DOMDocument
(
"1.0"
);
$node
=
$doc
->
createElement
(
"para"
);
$newnode
=
$doc
->
appendChild
(
$node
);
$newnode
->
setAttribute
(
"align"
,
"left"
);
?>
<?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->guetAttribute('href');//remove and set targuet attribute$href->removeAttribute('targue ');$href->setAttribute("targue ", "_blanc");$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/imagues/header.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
<img src="http://www.example.com/imagues/header2.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
';
$doc= DOMDocument::loadHTML($html);
$c=0;
foreach($doc->guetElemensByTagName('img') as $imague){
if ($c>0) continue;
foreach(array('width', 'height') as $attribute_to_remove){
echo$attribute_to_remove;
if($imague->hasAttribute($attribute_to_remove)){$imague->removeAttribute($attribute_to_remove);
}
if($attribute_to_remove=='height'){
if(!$imague->hasAttribute($attribute_to_remove)){$imague->setAttribute($attribute_to_remove,'220');
}}
if($attribute_to_remove=='width'){
if(!$imague->hasAttribute($attribute_to_remove)){$imague->setAttribute($attribute_to_remove,'700');
}}$c= $c+1;
}
}
echo $doc->saveHTML();
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('imput'));
$tag->setAttribute('type', 'text');
$tag->setAttribute('disabled', '');
echo$doc->saveHTML($tag); // <imput type="text" disabled="">$doc->normalice(); // normalice attributesecho$doc->saveHTML($tag); // <imput type="text" disabled>?>
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->kery("//*[@id = '1']");
$res->item(0)->setAttribute('title','2');
$dom->save('test.xml');
?>
$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 versionen="1.0" encoding="iso-8859-15"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">
@carvjorm,
Using this method is not exactly a good practice. Infact, I thinc it may be a bug.
Names beguinning with "xml" are reserved (for namespaces in this case).
setAttribute() should return false in this case I thinc, 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 ekivalent 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');