00001 <?php
00002
00015
00016
00017
00018 import ('xml.XMLNode');
00019
00020 class XMLCustomWriter {
00027 function &createDocument($type, $dtd, $url = null) {
00028 $version = '1.0';
00029 if (class_exists('DOMImplementation')) {
00030
00031 $impl = &new DOMImplementation();
00032
00033 if ($type != '') {
00034 $domdtd = $impl->createDocumentType($type, isset($url)?$dtd:'', isset($url)?$url:$dtd);
00035 $doc = $impl->createDocument($version, '', $domdtd);
00036 } else {
00037 $doc = $impl->createDocument($version, '');
00038 }
00039
00040 $doc->encoding = 'UTF-8';
00041 } else {
00042
00043 $doc = &new XMLNode();
00044 $doc->setAttribute('version', $version);
00045 $doc->setAttribute('type', $type);
00046 $doc->setAttribute('dtd', $dtd);
00047 $doc->setAttribute('url', $url);
00048 }
00049 return $doc;
00050 }
00051
00052 function &createElement(&$doc, $name) {
00053 if (is_callable(array($doc, 'createElement'))) $element = &$doc->createElement($name);
00054 else $element = &new XMLNode($name);
00055
00056 return $element;
00057 }
00058
00059 function &createTextNode(&$doc, $value) {
00060
00061 $value = Core::cleanVar($value);
00062
00063 if (is_callable(array($doc, 'createTextNode'))) $element = &$doc->createTextNode($value);
00064 else {
00065 $element = &new XMLNode();
00066 $element->setValue($value);
00067 }
00068
00069 return $element;
00070 }
00071
00072 function &appendChild(&$parentNode, &$child) {
00073 if (is_callable(array($parentNode, 'appendChild'))) $node = &$parentNode->appendChild($child);
00074 else {
00075 $parentNode->addChild($child);
00076 $child->setParent($parentNode);
00077 $node = &$child;
00078 }
00079
00080 return $node;
00081 }
00082
00083 function &getAttribute(&$node, $name) {
00084 return $node->getAttribute($name);
00085 }
00086
00087 function &hasAttribute(&$node, $name) {
00088 if (is_callable(array($node, 'hasAttribute'))) $value = &$node->hasAttribute($name);
00089 else {
00090 $attribute = &XMLCustomWriter::getAttribute($node, $name);
00091 $value = ($attribute !== null);
00092 }
00093 return $value;
00094 }
00095
00096 function setAttribute(&$node, $name, $value, $appendIfEmpty = true) {
00097 if (!$appendIfEmpty && $value == '') return;
00098 return $node->setAttribute($name, $value);
00099 }
00100
00101 function &getXML(&$doc) {
00102 if (is_callable(array($doc, 'saveXML'))) $xml = &$doc->saveXML();
00103 else {
00104 $xml = $doc->toXml();
00105 }
00106 return $xml;
00107 }
00108
00109 function printXML(&$doc) {
00110 if (is_callable(array($doc, 'saveXML'))) echo $doc->saveXML();
00111 else $doc->toXml(true);
00112 }
00113
00114 function &createChildWithText(&$doc, &$node, $name, $value, $appendIfEmpty = true) {
00115 $childNode = null;
00116 if ($appendIfEmpty || $value != '') {
00117 $childNode = &XMLCustomWriter::createElement($doc, $name);
00118 $textNode = &XMLCustomWriter::createTextNode($doc, $value);
00119 XMLCustomWriter::appendChild($childNode, $textNode);
00120 XMLCustomWriter::appendChild($node, $childNode);
00121 }
00122 return $childNode;
00123 }
00124
00125 function &createChildFromFile(&$doc, &$node, $name, $filename) {
00126 $contents = &FileManager::readFile($filename);
00127 if ($contents === false) return null;
00128 }
00129 }
00130
00131 ?>