Xpoint
   [напомнить пароль]

как правильно обьединить несколько xml файлов, средствами PHP ?

Метки: [без меток]
[удл]
2010-01-18 09:50:53 [обр] Амир(0/4)[досье]

Здравствуйте, есть необходимость, по запросу обьединять несколько xml файлов
и отдавать их клиенту (браузеру, обновление для десктопного и мобильных приложений и т.д).
для генерации xml использую simplexml_load_file .
код :

function xmlnewObjload ($xml) {
   $xml = file_exists($xml) ? simplexml_load_file($xml) : exit('не найден '.$xml);
   return $xml;
}

$area = xmlnewObjload ('/media/disk/15.01/area.xml');
$banner = xmlnewObjload ('/media/disk/15.01/banner.xml'); // и т.д, обьектов несколько.
// далее отдаю :
echo $area->asXML().$banner->asXML();

выводит несколько xml заголовков в итоге - <?xml version="1.0" encoding="UTF-8"?>
можно конечно регуляркой потом заголовки убрать, но файл очень большой на выходе,
и думаю что лучше поискать другое, правильное и не ресурсоёмкое решение.
Поделитесь опытом пожалуйста, как сделать объединение xml файлов правильно.

спустя 4 часа 33 минуты [обр] Давид Мзареулян(536/1003)[досье]
А Выс не смущает, что в XML-файле может быть только один корневой элемент?
спустя 1 час 32 минуты [обр] Амир(0/4)[досье]
Давид Мзареулян, спасибо понял о чем Вы.
в общем остановился на простом решении :
function xmlnewObjload ($xml) {
   $xml = file_exists($xml) ? simplexml_load_file($xml) : exit('не найден '.$xml);
   return $xml;
}
function xmlpattern ($xml) {
   $pattern = "'<\?xml.*?>'si";
   $content = preg_replace($pattern, '', $xml);
   return $content;
}
$area = xmlnewObjload ('/media/disk/15.01/area.xml');
$banner = xmlnewObjload ('/media/disk/15.01/banner.xml');
$xmlstr = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<content>
    <title>название</title>
XML;
$xmlstr .= xmlpattern ($area->asXML().$banner->asXML());
$xmlstr .= <<<XML
</content>
XML;
echo $xmlstr;
спустя 2 месяца [обр] met[досье]
Попробуйте такой вариант
$dom = new DOMDocument();
$src = $dom->createElement('src'); //создаем корн.элемнт <src> нового хмл-я
$dom->appendChild($src);          
$xp = new DOMXPath($this->domxml); 
$yy = $xp->query("/root"); // или какой там у вас корневой єлемент
foreach ($yy as $y){
   $node = $dom->importNode($y, true); //выбираем корнев. узел 
   $src->appendChild($node); //добавляем дочерним к корневом <src>
}
$NewXml = $dom->saveXML(); // сохраняем новый хмл в переменную
Powered by POEM™ Engine Copyright © 2002-2005