1<?php
2class DOMTree {
3  var $domelement;
4  var $content;
5
6  function DOMTree($domelement) {
7    $this->domelement = $domelement;
8    $this->content = $domelement->textContent;
9  }
10
11  function &document_element() {
12    return $this;
13  }
14
15  function &first_child() {
16    if ($this->domelement->firstChild) {
17      $child =& new DOMTree($this->domelement->firstChild);
18      return $child;
19    } else {
20      $null = false;
21      return $null;
22    };
23  }
24
25  function &from_DOMDocument($domdocument) {
26    $tree =& new DOMTree($domdocument->documentElement);
27    return $tree;
28  }
29
30  function get_attribute($name) {
31    return $this->domelement->getAttribute($name);
32  }
33
34  function get_content() {
35    return $this->domelement->textContent;
36  }
37
38  function has_attribute($name) {
39    return $this->domelement->hasAttribute($name);
40  }
41
42  function &last_child() {
43    $child =& $this->first_child();
44
45    if ($child) {
46      $sibling =& $child->next_sibling();
47      while ($sibling) {
48        $child =& $sibling;
49        $sibling =& $child->next_sibling();
50      };
51    };
52
53    return $child;
54  }
55
56  function &next_sibling() {
57    if ($this->domelement->nextSibling) {
58      $child =& new DOMTree($this->domelement->nextSibling);
59      return $child;
60    } else {
61      $null = false;
62      return $null;
63    };
64  }
65
66  function node_type() {
67    return $this->domelement->nodeType;
68  }
69
70  function &parent() {
71    if ($this->domelement->parentNode) {
72      $parent =& new DOMTree($this->domelement->parentNode);
73      return $parent;
74    } else {
75      $null = false;
76      return $null;
77    };
78  }
79
80  function &previous_sibling() {
81    if ($this->domelement->previousSibling) {
82      $sibling =& new DOMTree($this->domelement->previousSibling);
83      return $sibling;
84    } else {
85      $null = false;
86      return $null;
87    };
88  }
89
90  function tagname() {
91    return $this->domelement->localName;
92  }
93}
94?>