Класс DOMElement

(PHP 5, PHP 7)

Обзор классов

DOMElement extends DOMNode {
/* Свойства */
readonly public bool $schemaTypeInfo ;
readonly public string $tagName ;
/* Методы */
public __construct ( string $name [, string $value [, string $namespaceURI ]] )
public string getAttribute ( string $name )
public DOMAttr getAttributeNode ( string $name )
public DOMAttr getAttributeNodeNS ( string $namespaceURI , string $localName )
public string getAttributeNS ( string $namespaceURI , string $localName )
public DOMNodeList getElementsByTagName ( string $name )
public DOMNodeList getElementsByTagNameNS ( string $namespaceURI , string $localName )
public bool hasAttribute ( string $name )
public bool hasAttributeNS ( string $namespaceURI , string $localName )
public bool removeAttribute ( string $name )
public bool removeAttributeNode ( DOMAttr $oldnode )
public bool removeAttributeNS ( string $namespaceURI , string $localName )
public DOMAttr setAttribute ( string $name , string $value )
public DOMAttr setAttributeNode ( DOMAttr $attr )
public DOMAttr setAttributeNodeNS ( DOMAttr $attr )
public void setAttributeNS ( string $namespaceURI , string $qualifiedName , string $value )
public void setIdAttribute ( string $name , bool $isId )
public void setIdAttributeNode ( DOMAttr $attr , bool $isId )
public void setIdAttributeNS ( string $namespaceURI , string $localName , bool $isId )
/* Наследуемые методы */
public DOMNode DOMNode::appendChild ( DOMNode $newnode )
public string DOMNode::C14N ([ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes ]]]] )
public int DOMNode::C14NFile ( string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes ]]]] )
public DOMNode DOMNode::cloneNode ([ bool $deep ] )
public int DOMNode::getLineNo ( void )
public string DOMNode::getNodePath ( void )
public bool DOMNode::hasAttributes ( void )
public bool DOMNode::hasChildNodes ( void )
public DOMNode DOMNode::insertBefore ( DOMNode $newnode [, DOMNode $refnode ] )
public bool DOMNode::isDefaultNamespace ( string $namespaceURI )
public bool DOMNode::isSameNode ( DOMNode $node )
public bool DOMNode::isSupported ( string $feature , string $version )
public string DOMNode::lookupNamespaceURI ( string $prefix )
public string DOMNode::lookupPrefix ( string $namespaceURI )
public void DOMNode::normalize ( void )
public DOMNode DOMNode::removeChild ( DOMNode $oldnode )
public DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )
}

Свойства

schemaTypeInfo

Пока не реализовано, всегда возвращает NULL

tagName

Имя элемента

Примечания

Замечание:

Расширение DOM использует кодировку UTF-8. Используйте функции utf8_encode() и utf8_decode() для работы с текстами в кодировке ISO-8859-1, либо Iconv в других кодировках.

Содержание

Коментарии

Автор:
Hi there.

Remember to append a DOMNode (or any of its descendants) to a DOMDocument __BEFORE__ you try to append a child to it.

I don't know why it has to be this way but it can't be done without it.

bye
2008-07-18 16:49:08
http://php5.kiev.ua/manual/ru/class.domelement.html
Автор:
I wanted to find similar Elements - thats why I built an Xpath-String like this - maybe somebody needs it... its not very pretty - but neither is domdocument :)

<?php

$dom
->load($xmlFile))

$xpathQuery '//*';
$xmlNodes $xpath->query($xpathQuery);
       
$pathlist = array();
$attrlist = array();
foreach (
$xmlNodes as $node) {

 
$depth $this->_getDomDepth($node);   //get Path-Depth (for array key)
 
$pathlist[$depth] = $node->tagName;     // tagname
         
 
$attrs $node->attributes;
 
$attr='';
 
$a=0;
  foreach (
$attrs as $attrName => $attrNode// attributes
           
{
              if (
$attrName !='reg')
              {
                if (
$a++!=0$attr .= ' and ';
               
$attr .= '@'.$attrName.'='."'".$attrNode->value."'";
              }
            }
         
         
$attrlist[$depth] = $attr?'['.$attr.']':'';
         
         
$path ''; for ($i=0;$i<=$depth;$i++) $path .= '/'.$pathlist[$i].$attrlist[$i];  // the xpath of the actual Element

    // ... now you can go on and user $path to find similar elements
   
}
  }
}

 private function 
_getDomDepth(DomNode $node)
   {
     
$r = -2;
     while (
$node) {
       
$r++; 
       
$node $node->parentNode;
     } 
     return 
$r;
   }
?>
2008-09-14 09:18:21
http://php5.kiev.ua/manual/ru/class.domelement.html
Caveat!
It took me almost an hour to figure this out, so I hope it saves at least one of you some time.

If you want to debug your DOM tree and try var_dump() or similar you will be fooled into thinking the DOMElement that you are looking at is empty, because var_dump() says: object(DOMElement)#1 (0) { } 

After much debugging I found out that all DOM objects are invisible to var_dump() and print_r(), my guess is because they are C objects and not PHP objects. So I tried saveXML(), which works fine on DOMDocument, but is not implemented on DOMElement.

The solution is simple (if you know it):
$xml = $domElement->ownerDocument->saveXML($domElement);

This will give you an XML representation of $domElement.
2008-10-08 12:11:51
http://php5.kiev.ua/manual/ru/class.domelement.html
Автор:
Hi to get the value of DOMElement just get the nodeValue public parameter (it is inherited from DOMNode):
<?php 
echo $domElement->nodeValue
?>
Everything is obvious if you now about this thing ;-)
2008-10-25 08:33:34
http://php5.kiev.ua/manual/ru/class.domelement.html
Автор:
Although it may be preferable to use the dom to manipulate elements, sometimes it's useful to actually get the innerHTML from a document element (e.g. to load into a client-side editor).

To get the innerHTML of a specific element ($elem_id) in a specific html file ($filepath):

<?php
$innerHTML 
'';
$doc = new DOMDocument();
$doc->loadHTMLFile($filepath);   
$elem $doc->getElementById($elem_id);

// loop through all childNodes, getting html       
$children $elem->childNodes;
foreach (
$children as $child) {
   
$tmp_doc = new DOMDocument();
   
$tmp_doc->appendChild($tmp_doc->importNode($child,true));       
   
$innerHTML .= $tmp_doc->saveHTML();
}
?>
2008-11-04 10:14:12
http://php5.kiev.ua/manual/ru/class.domelement.html
Автор:
It would be nice to have a function which converts a document/node/element into a string. 

Anyways, I use the following code snippet to get the innerHTML value of a DOMNode:

<?php
function getInnerHTML($Node)
{
     
$Body $Node->ownerDocument->documentElement->firstChild->firstChild;
     
$Document = new DOMDocument();     
     
$Document->appendChild($Document->importNode($Body,true));
     return 
$Document->saveHTML();
}
?>
2009-05-07 12:22:28
http://php5.kiev.ua/manual/ru/class.domelement.html
The following code shows can text-only content be extracted from a document.

<?php
function getTextFromNode($Node$Text "") {
    if (
$Node->tagName == null)
        return 
$Text.$Node->textContent;

   
$Node $Node->firstChild;
    if (
$Node != null)
       
$Text getTextFromNode($Node$Text);

    while(
$Node->nextSibling != null) {
       
$Text getTextFromNode($Node->nextSibling$Text);
       
$Node $Node->nextSibling;
    }
    return 
$Text;
}

function 
getTextFromDocument($DOMDoc) {
    return 
getTextFromNode($DOMDoc->documentElement);
}

$Doc = new DOMDocument();
$Doc->loadHTMLFile("Test.html");
echo 
getTextFromDocument($Doc)."\n";
?>
2009-09-03 23:08:11
http://php5.kiev.ua/manual/ru/class.domelement.html
Hi!

Combining all th comments, the easiest way to get inner HTML of the node is to use this function:

<?php
function get_inner_html$node ) {
   
$innerHTML'';
   
$children $node->childNodes;
    foreach (
$children as $child) {
       
$innerHTML .= $child->ownerDocument->saveXML$child );
    }

    return 
$innerHTML;
}
?>
2010-12-05 01:24:44
http://php5.kiev.ua/manual/ru/class.domelement.html
Автор:
you can use DOMNode::nodeValue
DOMElement inherits this public property.

$elem->nodeValue
2010-12-24 10:22:23
http://php5.kiev.ua/manual/ru/class.domelement.html
This works perfect for me as well:

<?php $xml $domElement->ownerDocument->saveXML($domElement); ?>
2011-04-22 05:34:05
http://php5.kiev.ua/manual/ru/class.domelement.html
How to rename an element and preserve attributes:

<?php

// Changes the name of element $element to $newName.
function renameElement($element$newName) {
 
$newElement $element->ownerDocument->createElement($newName);
 
$parentElement $element->parentNode;
 
$parentElement->insertBefore($newElement$element);

 
$childNodes $element->childNodes;
  while (
$childNodes->length 0) {
   
$newElement->appendChild($childNodes->item(0));
  }

 
$attributes $element->attributes;
  while (
$attributes->length 0) {
   
$attribute $attributes->item(0);
    if (!
is_null($attribute->namespaceURI)) {
     
$newElement->setAttributeNS('http://www.w3.org/2000/xmlns/',
                                 
'xmlns:'.$attribute->prefix,
                                 
$attribute->namespaceURI);
    }
   
$newElement->setAttributeNode($attribute);
  }

 
$parentElement->removeChild($element);
}
 
function 
prettyPrint($d) {
 
$d->formatOutput true;
  echo 
'<pre>'.htmlspecialchars($d->saveXML()).'</pre>';
}

$d = new DOMDocument'1.0' );
$d->loadXML('<?xml version="1.0"?>
<library>
  <data a:foo="1" x="bar" xmlns:a="http://example.com/a">
    <invite>
      <username>jmansa</username>
      <userid>1</userid>
    </invite>
    <update>1</update>
  </data>
</library>'
);

$xpath = new DOMXPath($d);
$elements $xpath->query('/library/data');
if (
$elements->length == 1) {
 
$element $elements->item(0);
 
renameElement($element'invites');
}

prettyPrint($d);

?>
2013-02-26 17:23:08
http://php5.kiev.ua/manual/ru/class.domelement.html
Автор:
This page doesn't list the inherited properties from DOMNode, e.g. the quite important textContent property. It would be immensely helpful if it would list those as well.
2013-11-07 13:02:33
http://php5.kiev.ua/manual/ru/class.domelement.html
Автор:
Get html of a node
 $html .= $dom->saveHTML($node);
2014-03-03 17:48:39
http://php5.kiev.ua/manual/ru/class.domelement.html

    Поддержать сайт на родительском проекте КГБ