/** * Поиск нод по имени в передаваемом Xml объекте. * * @param Xml_Object $Xml_Object - Xml объект в котором производится поиск * @param string $name - имя ноды которую ищем * @return Xml_Object - найденая нода/список нод либо null */ public static function Search_Node(Xml_Object $Xml_Object, $name) { if (false != ($Xml = $Xml_Object->{$name})) { return $Xml; } else { foreach ($Xml_Object->Get_NodeTags() as $xml_list) { foreach ($xml_list as $xml) { if (false != ($Xml = self::Search_Node($xml, $name))) { return $Xml; } } } return null; } }
private function _Save(Xml_Object $Xml_Object, $depth = 0) { foreach ($Xml_Object->Get_NodeTags() as $xml_list) { foreach ($xml_list as $Xml) { $string = ''; /* @var $Xml Xml_Object */ // имя тега $string .= '<' . $Xml->Get_Name(); // атрибуты foreach ($Xml->Get_Attributes() as $a => $v) { $string .= ' ' . $a . '="' . self::String_Xml($v, $this->_Encoding) . '"'; } // значение ноды и запись в файл if (false != ($v = $Xml->Get_Data())) { // конечная нода с содержимым $string = $string . '><![CDATA[' . self::String_Xml($v, $this->_Encoding) . ']]></' . $Xml->Get_Name() . '>'; fputs($this->_Fp, str_repeat("\t", $depth) . $string . "\n"); } else { if (0 == count($Xml->Get_NodeTags())) { // конечная нода без содержимого $string = $string . '/>'; fputs($this->_Fp, str_repeat("\t", $depth) . $string . "\n"); } else { // родительская нода $string = $string . '>'; fputs($this->_Fp, str_repeat("\t", $depth) . $string . "\n"); $this->_Save($Xml, $depth + 1); fputs($this->_Fp, str_repeat("\t", $depth) . '</' . $Xml->Get_Name() . '>' . "\n"); } } } } }