DOMElement sınıfı

(PHP 5, PHP 7, PHP 8)

Sınıf Sözdizimi

class DOMElement extends DOMNode implements DOMParentNode, DOMChildNode {
/* Özellikler */
public readonly string $tagName;
public readonly mixed $schemaTypeInfo = null;
public readonly ?DOMElement $firstElementChild;
public readonly ?DOMElement $lastElementChild;
public readonly int $childElementCount;
/* Miras alınan özellikler */
public readonly ?string $nodeName;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly DOMNodeList $childNodes;
public readonly ?DOMNode $firstChild;
public readonly ?DOMNode $lastChild;
public readonly ?DOMNode $previousSibling;
public readonly ?DOMNode $nextSibling;
public readonly ?DOMNamedNodeMap $attributes;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public ?string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
/* Yöntemler */
public __construct(string $qualifiedName, ?string $value = null, string $namespace = "")
public after(DOMNode|string ...$nodes): void
public append(DOMNode|string ...$nodes): void
public before(DOMNode|string ...$nodes): void
public getAttributeNS(?string $uri, string $isim): string
public getElementsByTagNameNS(?string $isimalanı, string $isim): DOMNodeList
public hasAttribute(string $isim): bool
public hasAttributeNS(?string $uri, string $isim): bool
public insertAdjacentText(string $where, string $data): void
public prepend(DOMNode|string ...$nodes): void
public remove(): void
public removeAttribute(string $isim): bool
public removeAttributeNS(?string $uri, string $isim): void
public replaceChildren(DOMNode|string ...$nodes): void
public replaceWith(DOMNode|string ...$nodes): void
public setAttribute(string $isim, string $değer): DOMAttr|bool
public setAttributeNS(?string $uri, string $isim, string $değer): void
public setIdAttribute(string $isim, bool $id_olarak): void
public setIdAttributeNode(DOMAttr $öznitelik, bool $id_olarak): void
public setIdAttributeNS(string $uri, string $isim, bool $id_olarak): void
public toggleAttribute(string $qualifiedName, ?bool $force = null): bool
/* Miras alınan yöntemler */
public DOMNode::C14N(
    bool $özel = false,
    bool $aAçıklamalı = false,
    ?array $xpath = null,
    ?array $isim_alanları = null
): string|false
public DOMNode::C14NFile(
    string $uri,
    bool $exclusive = false,
    bool $withComments = false,
    ?array $xpath = null,
    ?array $nsPrefixes = null
): int|false
public DOMNode::cloneNode(bool $torunlar_dahil = false): DOMNode|false
public DOMNode::getRootNode(array $options = null): DOMNode
public DOMNode::insertBefore(DOMNode $yeni, ?DOMNode $mevcut = null): DOMNode|false
public DOMNode::isEqualNode(?DOMNode $otherNode): bool
public DOMNode::isSameNode(DOMNode $düğüm): bool
public DOMNode::isSupported(string $özellik, string $sürüm): bool
}

Özellikler

childElementCount

Çocuk eleman sayısı.

firstElementChild

İlk çocuk eleman ya da null.

lastElementChild

Son çocuk eleman ya da null.

nextElementSibling

Sonraki kardeş eleman ya da null.

previousElementSibling

Önceki kardeş eleman ya da null.

schemaTypeInfo

Henüz gerçeklenmedi; daima null döndürür.

tagName

Elemanın ismi

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 firstElementChild, lastElementChild, childElementCount, previousElementSibling, ve nextElementSibling özellikleri eklendi.
8.0.0 DOMElement artık DOMParentNode ve DOMChildNode arayüzünü gerçekliyor.

Notlar

Bilginize:

DOM eklentisi UTF-8 kodlama kullanır. Diğer kodlamalarla çalışmak için mb_convert_encoding(), UConverter::transcode() veya iconv() kullanılabilir.

İçindekiler

add a note add a note

User Contributed Notes 13 notes

up
120
j DOT wagner ( AT ) medieninnovation.com
16 years ago
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.
up
63
Pinochet
16 years ago
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 ;-)
up
38
Janne Enberg
11 years ago
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.
up
28
dpetroff ( at ) gmail.com
14 years ago
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;
}
?>
up
10
Daniel Morlock
15 years ago
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();
}
?>
up
4
felix dot klee at inka dot de
11 years ago
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);

?>
up
4
patrick smith
16 years ago
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();
}
?>
up
3
ae.fxx
16 years ago
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
up
2
nawaman at gmail dot com
15 years ago
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";
?>
up
1
johnny
10 years ago
Get html of a node
$html .= $dom->saveHTML($node);
up
1
Anonymous
13 years ago
you can use DOMNode::nodeValue
DOMElement inherits this public property.

$elem->nodeValue
up
1
loopduplicate at burningtoken dot com
13 years ago
This works perfect for me as well:

<?php $xml = $domElement->ownerDocument->saveXML($domElement); ?>
up
-3
Severin
16 years ago
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;
   }
?>
To Top