• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • DOMElement::setAttribute()

    (PHP 5, PHP 7)

    Adds new attribute

    说明

    publicDOMElement::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');