name = $name; $this->attributes = array(); } function getName() { return $name; } abstract function getContents(); abstract function addContents($contents); function getAttribute($name) { return isset($this->attributes[$name]) ? $this->attributes[$name] : null; } function setAttribute($name, $value) { $this->attributes[$name] = $value; } function toXML($document) { $element = $document->createElement($this->name); foreach ($this->attributes as $k => $v) { $element->setAttribute($k, $v); } return $element; } function toLWData($document) { $root = $document->createElement("Node"); $root->setAttribute("name", $this->name); foreach ($this->attributes as $k => $v) { $node = $document->createElement("Attr"); $root->appendChild($node); $node->setAttribute("name", $k); $text = $document->createTextNode($v); $node->appendChild($text); } return $root; } } class data_leaf extends data_gen { private $contents; function __construct($name, $contents = "") { parent::__construct($name); $this->contents = $contents; } function getContents() { return $this->contents; } function addContents($contents) { $this->contents .= $contents; } function toXML($document) { $element = parent::toXML($document); $value = $document->createTextNode($this->contents); $element->appendChild($value); return $element; } function toLWData($document) { $element = parent::toLWData($document); $element->setAttribute("node", 0); if ($this->contents != '') { $node = $document->createElement("Text"); $value = $document->createTextNode($this->contents); $node->appendChild($value); $element->appendChild($node); } return $element; } } class data_node extends data_gen { private $contents; function __construct($name) { parent::__construct($name); $this->contents = array(); } function getContents() { return $this->contents; } function addContents($data) { if ($data instanceof data_gen) { array_push($this->contents, $data); } } function toXML($document) { $element = parent::toXML($document); foreach ($this->contents as $sub) { $node = $sub->toXML($document); $element->appendChild($node); } return $element; } function toLWData($document) { $element = parent::toLWData($document); $element->setAttribute("node", 1); foreach ($this->contents as $sub) { $node = $sub->toLWData($document); $element->appendChild($node); } return $element; } } ?>