То, что вы просите, вряд ли является трансформацией. Вы просто извлекаете <item>
элементы такими, какие они есть. Кроме того, полученный вами результат не является допустимым XML, поскольку в нем отсутствует корневой узел.
Кроме того, вы можете просто сделать это так:
$dom = new DOMDocument; // init new DOMDocument
$dom->loadXML($xml); // load some XML into it
$xpath = new DOMXPath($dom); // create a new XPath
$nodes = $xpath->query('//item'); // Find all item elements
foreach($nodes as $node) { // Iterate over found item elements
echo $dom->saveXml($node); // output the item node outerHTML
}
Выше было бы повторять узлы <item>
. Вы можете просто буферизовать вывод, соединить его со строкой, записать в него массив и взорваться и т. Д. - и записать его в файл.
Если вы хотите сделать это правильно с DOM (и корневым узлом), полный код будет:
$dom = new DOMDocument; // init DOMDocument for RSS
$dom->loadXML($xml); // load some XML into it
$items = new DOMDocument; // init DOMDocument for new file
$items->preserveWhiteSpace = FALSE; // dump whitespace
$items->formatOutput = TRUE; // make output pretty
$items->loadXML('<items/>'); // create root node
$xpath = new DOMXPath($dom); // create a new XPath
$nodes = $xpath->query('//item'); // Find all item elements
foreach($nodes as $node) { // iterate over found item nodes
$copy = $items->importNode($node, TRUE); // deep copy of item node
$items->documentElement->appendChild($copy); // append item nodes
}
echo $items->saveXML(); // outputs the new document
Вместо saveXML()
вы бы использовали save('filename.xml')
для записи в файл.