PHP.mk документација

DOMElement

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

class.domelement.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека class.domelement.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
DOMElement

Референца за `class.domelement.php` со подобрена типографија и навигација.

class.domelement.php

Класата DOMElement

класата mysqli_driver

Синопсис на класата

class DOMElement extends DOMNode implements DOMParentNode, DOMChildNode {
/* Наследни константи */
/* Својства */
public readonly string $tagName;
public string $id;
public readonly mixed $schemaTypeInfo;
public readonly ?DOMElement $firstElementChild;
public readonly ?DOMElement $lastElementChild;
public readonly int $childElementCount;
/* Наследени својства */
public readonly string $nodeName;
public readonly int $nodeType;
public readonly ?DOMNode $parentNode;
public readonly ?DOMElement $parentElement;
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 bool $isConnected;
public readonly ?DOMDocument $ownerDocument;
public readonly ?string $namespaceURI;
public string $prefix;
public readonly ?string $localName;
public readonly ?string $baseURI;
/* Методи */
public function __construct(string $qualifiedName, ?string $value = null, string $namespace = "")
public function after(DOMNode|string ...$nodes): void
public function append(DOMNode|string ...$nodes): void
public function before(DOMNode|string ...$nodes): void
public function getAttribute(string $qualifiedName): string
public function getAttributeNames(): array
public function getAttributeNode(string $qualifiedName): DOMAttr|DOMNameSpaceNode|false
public function getAttributeNodeNS(?string $namespace, string $localName): DOMAttr|DOMNameSpaceNode|null
public function getAttributeNS(?string $namespace, string $localName): string
public function getElementsByTagName(string $qualifiedName): DOMNodeList
public function getElementsByTagNameNS(?string $namespace, string $localName): DOMNodeList
public function hasAttribute(string $qualifiedName): bool
public function hasAttributeNS(?string $namespace, string $localName): bool
public function insertAdjacentElement(string $where, DOMElement $element): ?DOMElement
public function insertAdjacentText(string $where, string $data): void
public function prepend(DOMNode|string ...$nodes): void
public function remove(): void
public function removeAttribute(string $qualifiedName): bool
public function removeAttributeNode(DOMAttr $attr): DOMAttr|false
public function removeAttributeNS(?string $namespace, string $localName): void
public function replaceChildren(DOMNode|string ...$nodes): void
public function replaceWith(DOMNode|string ...$nodes): void
public function setAttribute(string $qualifiedName, string $value): DOMAttr|bool
public function setAttributeNode(DOMAttr $attr): DOMAttr|null|false
public function setAttributeNodeNS(DOMAttr $attr): DOMAttr|null|false
public function setAttributeNS(?string $namespace, string $qualifiedName, string $value): void
public function setIdAttribute(string $qualifiedName, bool $isId): void
public function setIdAttributeNode(DOMAttr $attr, bool $isId): void
public function setIdAttributeNS(string $namespace, string $qualifiedName, bool $isId): void
public function toggleAttribute(string $qualifiedName, ?bool $force = null): bool
/* Наследени методи */
public function DOMNode::appendChild(DOMNode $node): DOMNode|false
public function DOMNode::C14N(
         bool $exclusive = false,
         bool $withComments = false,
         ?array $xpath = null,
         ?array $nsPrefixes = null
): string|false
public function DOMNode::C14NFile(
         string $uri,
         bool $exclusive = false,
         bool $withComments = false,
         ?array $xpath = null,
         ?array $nsPrefixes = null
): int|false
public function DOMNode::cloneNode(bool $deep = false): DOMNode|false
public function DOMNode::getLineNo(): int
public function DOMNode::getNodePath(): ?string
public function DOMNode::getRootNode(?array $options = null): DOMNode
public function DOMNode::hasAttributes(): bool
public function DOMNode::hasChildNodes(): bool
public function DOMNode::insertBefore(DOMNode $node, ?DOMNode $child = null): DOMNode|false
public function DOMNode::isDefaultNamespace(string $namespace): bool
public function DOMNode::isEqualNode(?DOMNode $otherNode): bool
public function DOMNode::isSameNode(DOMNode $otherNode): bool
public function DOMNode::isSupported(string $feature, string $version): bool
public function DOMNode::lookupNamespaceURI(?string $prefix): ?string
public function DOMNode::lookupPrefix(string $namespace): ?string
public function DOMNode::normalize(): void
public function DOMNode::removeChild(DOMNode $child): DOMNode|false
public function DOMNode::replaceChild(DOMNode $node, DOMNode $child): DOMNode|false
public function DOMNode::__sleep(): array
public function DOMNode::__wakeup(): void
}

Својства

childElementCount

Бројот на елементи деца.

firstElementChild

Прв елемент дете или null.

lastElementChild

Последен елемент на дете или null.

nextElementSibling

Следниот елемент брат или null.

previousElementSibling

Претходниот елемент брат или null.

schemaTypeInfo

Сè уште не е имплементирано, секогаш враќа null

tagName

Име на елементот

className

Низка, која ги претставува класи на елементот разделени со празни места.

id

Го рефлектира ID-то на елементот преку "id" attribute.

Дневник на промени

Верзија = NULL
8.3.0 На className and id својства и Врати имиња на атрибути., (PHP 8 >= 8.3.0), DOMElement::insertAdjacentElement()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во (PHP 8 >= 8.3.0) методи се додадени.
8.0.0 На firstElementChild, lastElementChild, childElementCount, previousElementSiblingПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во nextElementSibling својства се додадени.
8.0.0 DOMElement implements DOMParentNode and DOMChildNode now.

Белешки

Забелешка: DOM екстензијата користи UTF-8 кодирање. Користете mb_convert_encoding(), GNU Recode документацијата на вашата инсталација за детални инструкции за барања за прекодирање., или iconv() за ракување со други кодирања.

Содржина

Белешки од корисници 13 белешки

ј. Вагнер (на) medieninnovation.com
пред 17 години
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.
Пиноче
пред 17 години
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 ;-)
Јане Енберг
12 години пред
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.
дпетроф (на) gmail.com
пред 15 години
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;
}
?>
Даниел Морлок
пред 17 години
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();
}
?>
felix dot klee на inka dot de
пред 13 години
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);

?>
патрик смит
пред 17 години
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();
}
?>
ae.fxx
пред 17 години
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
johnny
12 години пред
Get html of a node
 $html .= $dom->saveHTML($node);
Анонимен
пред 15 години
you can use DOMNode::nodeValue
DOMElement inherits this public property.

$elem->nodeValue
loopduplicate на burningtoken точка com
пред 15 години
This works perfect for me as well:

<?php $xml = $domElement->ownerDocument->saveXML($domElement); ?>
nawaman на gmail точка com
пред 16 години
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";
?>
Северин
пред 17 години
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;
   }
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.