PHP 5.4.31 Released

DOMDocument::registerNodeClass

(PHP 5 >= 5.2.0)

DOMDocument::registerNodeClassTemel düğüm türünü oluşturmakta kullanılacak türetilmiş sınıfı belirtmek için kullanılır

Açıklama

bool DOMDocument::registerNodeClass ( string $temelSınıf , string $türetilenSınıf )

Sonradan PHP DOM eklentisi tarafından kullanılmak üzere hazırladığınız kendi DOM sınıfınızı tanıtmanızı sağlar.

Bu yöntem DOM standardının bir parçası değildir.

Değiştirgeler

temelSınıf

Kendi sınıfınızı türetirken kullandığınız temel sınıfın ismi. Bu sınıfların listesi için bakınız: DOM.

türetilenSınıf

Türettiğiniz sınıfın ismi. NULL belirtilirse, temelSınıf'tan evvelce türetilen sınıf silinir.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Sürüm Bilgisi

Sürüm: Açıklama
PHP 5.2.2 5.2.2 öncesinde, temelSınıf'tan evvelce türetilmiş bir sınıf varsa yenisinin kaydı yapılmadan önce eskisinin kaydı silinmek zorundaydı.

Örnekler

Örnek 1 - Kolaylık olsun diye DOMElement sınıfına yeni bir yöntem eklemek

<?php

class myElement extends DOMElement {
   function 
appendElement($name) {
      return 
$this->appendChild(new myElement($name));
   }
}

class 
myDocument extends DOMDocument {
   function 
setRoot($name) {
      return 
$this->appendChild(new myElement($name));
   }
}

$doc = new myDocument();
$doc->registerNodeClass('DOMElement''myElement');

// Artık bir elemanı diğerine eklemek için bir yöntem yetecek!
$root $doc->setRoot('root');
$child $root->appendElement('child');
$child->setAttribute('foo''bar');

echo 
$doc->saveXML();

?>

Yukarıdaki örneğin çıktısı:

<?xml version="1.0"?>
<root><child foo="bar"/></root>

Örnek 2 - Elemanların özel bir sınıf olarak döndürülmesi

<?php
class myElement extends DOMElement {
    public function 
__toString() {
        return 
$this->nodeValue;
    }
}

$doc = new DOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");
$doc->registerNodeClass("DOMElement""myElement");

$element $doc->getElementsByTagName("child")->item(0);
var_dump(get_class($element));

// __toString yönteminden yararlanalım
echo $element;
?>

Yukarıdaki örneğin çıktısı:

string(9) "myElement"
text in child

Örnek 3 - Asıl belgeyi döndürmek

DOMDocument sınıfına özgü olarak, sınıf örneklenirken sınıfın ownerDocument özelliği örneklenen sınıfı gösterecektir. Yani, DOMDocument sınıfı için DOMDocument::registerNodeClass() yönteminin kullanımına aslında gerek yoktur.

<?php
class myDOMDocument extends DOMDocument {
}

class 
myOtherDOMDocument extends DOMDocument {
}

// myDOMDocument nesnesini XML belge olarak oluşturalım
$doc = new myDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");

$child $doc->getElementsByTagName("child")->item(0);

// Düğümün sahibi myDOMDocument nesnesidir
var_dump(get_class($child->ownerDocument));

// myDOMDocument nesnesinden bir düğüm alalım
$newdoc = new myOtherDOMDocument;
$child $newdoc->importNode($child);

// Düğümün sahibi artık myOtherDOMDocument nesnesi oldu
var_dump(get_class($child->ownerDocument));
?>

Yukarıdaki örneğin çıktısı:

string(13) "myDOMDocument"
string(18) "myOtherDOMDocument"

add a note add a note

User Contributed Notes 2 notes

up
1
crh3675 at gmail dot com
4 years ago
Creating innerHTML and outerHTML

<?php

class DOMHTMLElement extends DOMElement
{
    function
__construct() { parent::__construct();}
   
    public function
innerHTML()
    {
       
$doc = new DOMDocument();
      foreach (
$this->childNodes as $child){
         
$doc->appendChild($doc->importNode($child, true));
        }
       
$content = $doc->saveHTML();
        return
$content;
    }
   
    public function
outerHTML()
    {
       
$doc = new DOMDocument();
       
$doc->appendChild($doc->importNode($this, true));
       
$content = $doc->saveHTML();
        return
$content;
    }
}

$dom = DOMDocument::loadHTMLFile($file);
$dom->registerNodeClass('DOMElement','DOMHTMLElement');
           
if(
$dom)
{
   
$xpath = new DOMXpath($dom);   
   
$regions = $xpath->query("//*[contains(@class, 'editable')]");   
   
$content = '';
   
    foreach(
$regions as $region){
       
$content .= $region->outerHTML();
    }   
   
    return
$content;
   
}else{               
    throw new
Exception('Cannot parse HTML.  Please verify the syntax is correct.');
}
?>
up
0
arnold at adaniels dot nl
5 years ago
Note than save and saveXML are not affected by __toString().
To Top