=PHP 5.0.0 * @filecharset utf-8 */ /** * Удаление узла xml * * @param SimpleXMLElement $xml * @param string XPath $path * @param string ('one'|'child'|'all') $multi * * Использование: * * Пример xml файла - http://ru2.php.net/manual/ru/ref.simplexml.php * * $xml = simplexml_load_file($xmlfile); * * //1. удаление строго 1 узла (без дочерних узлов) * // при этом $path должен указывать строго на 1 (уникальный) узел без дочерних элементов * removeNode($xml, '//movie/rating[@type="thumbs"]'); * * //2. удаление 1 узла (c дочерними узлами) * // при этом $path может указывать на любое количество узлов - удален будет только первый и * // со всеми дочерними узлами * removeNode($xml, '//characters', 'child') * * //3. удаление всех узлов (c дочерними узлами) * // при этом $path может указывать на любое количество узлов - удалены будут все * // узлы, которые вернул $path со всеми дочерними узлами * removeNode($xml, '//rating', 'all') * * $xml->asXML($xmlfile); * */ function removeNode(SimpleXMLElement $xml, $path, $multi='one') { $result = $xml->xpath($path); # для неправильного $path if (!isset($result[0])) return false; switch ($multi) { case 'all': foreach ($result as $r){ if (@isset($r[0])) unset($r[0]); } return true; case 'child': unset($result[0][0]); return true; case 'one': if (count($result[0]->children())==0 && count($result)==1) { unset($result[0][0]); return true; } default: return false; } } /** * Добавление узла xml * * @param SimpleXMLElement $xml * @param string XPath $path * @param string $node * @param string $value * * Использование: * * $xml = simplexml_load_file($xmlfile); * * // добавление тэга

со значением 'test' в документ * addNode($xml, '//*', 'p', 'test'); * * $xml->asXML($xmlfile); * */ function addNode(SimpleXMLElement $xml, $path, $node, $value='') { $result = $xml->xpath($path); # для неправильного $path if (!isset($result[0])) return false; foreach ($result as $r) $r->addChild($node, $value); return true; } /** * Обновление/добавление содержимого узла xml * (узлы не должны содержать потомков) * * @param SimpleXMLElement $xml * @param string XPath $path * @param string $value * * Использование: * * $xml = simplexml_load_file($xmlfile); * * // обновляет все узлы

, которые не содержат потомков, * // устанавливая
test
* updateNode($xml, '//div', 'test'); * * $xml->asXML($xmlfile); * */ function updateNode(SimpleXMLElement $xml, $path, $value) { $result = $xml->xpath($path); # для неправильного $path if (!isset($result[0])) return false; # только, если нода не имеет дочерних узлов foreach ($result as $r){ if (count($r->children())==0) $r[0]=$value; } return true; } /** * Обновление/добавление аттрибутов узла xml * * @param SimpleXMLElement $xml * @param string XPath $path * @param string $value * * Использование: * * $xml = simplexml_load_file($xmlfile); * * // устанавливает всем элементам
аттрибут alt со значением 'alt' * addAtrribute($xml, '//div', 'alt', 'alt'); * * $xml->asXML($xmlfile); * */ function addAtrribute(SimpleXMLElement $xml, $path, $atrr, $value='') { $result = $xml->xpath($path); # для неправильного $path if (!isset($result[0])) return false; foreach ($result as $r) $r[$atrr]=$value; return true; } /** * Установка уникального аттрибута ID узла xml * * @param SimpleXMLElement $xml * @param string XPath $path * * Использование: * * $xml = simplexml_load_file($xmlfile); * * // устанавливает всем элементам уникальные аттрибуты 'id' * // id='1', id='2' и т.д. * // при этом, если у узла есть аттриубт с таким именем, то он * // будет заменен!!! * * setId($xml, '//*'); * * $xml->asXML($xmlfile); * */ function setId(SimpleXMLElement $xml, $path) { $result = $xml->xpath($path); # для неправильного $path if (!isset($result[0])) return false; $i=1; foreach ($result as $r) { $r['id']=$i; $i++; } return true; } /** * Удаление пробелов и форматирование xml файла * * @param string $xmlFile * * Использование: * * trimXml($xmlfile)) * */ function trimXml($xmlfile) { $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; if (!$dom->load($xmlfile)) return false; $dom->formatOutput = true; if (!$dom->save($xmlfile)) return false; return true; } ?>