如何解决用DOM进行XML重整
| 我正在尝试重新格式化XML以添加中间层节点。 这是我输入的内容:<channel>
<item>
<title>Advanced PHP Book</title>
</item>
<item>
<title>MySQL primer</title>
</item>
<item>
<title>C++ for beginners</title>
</item>
</channel>
我需要像最后这样(在页面和频道之间添加页面节点):
<channel>
<page>
<item>
<title>Advanced PHP Book</title>
</item>
<item>
<title>MySQL primer</title>
</item>
<item>
<title>C++ for beginners</title>
</item>
</page>
</channel>
这是我的测试代码:
$sxe = simplexml_load_string($string);
$dom_sxe = dom_import_simplexml($sxe);
$dom = new DOMDocument(\'1.0\');
$channel = $dom->appendChild($dom->createElement(\'channel\'));
$page = $channel->appendChild($dom->createElement(\'page\'));
$dom_sxe = $dom->importNode($dom_sxe,true);
$dom_sxe = $page->appendChild($dom_sxe);
$dom->formatOutput = true;
echo $dom->saveXML();
我的问题是通道元素增加了一倍。
请帮忙。
解决方法
我不认为这应该太难了:我认为使用using3来使您变得过于复杂。
$dom = new DOMDocument;
$dom->loadXML($string);
// create the <page> element
$page = $dom->createElement(\'page\');
while ($dom->firstChild->firstChild) {
// move the items in <channel> to the <page> element
$page->appendChild($dom->firstChild->firstChild);
}
// insert the <page> element into <channel>
$dom->firstChild->appendChild($page);
$dom->saveXML();
,$xml = \'<channel> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </channel>\';
$dom = new DOMDocument;
$dom->loadXML($xml);
$page = $dom->createElement(\'page\');
$items = $dom->getElementsByTagName(\'item\');
while ($items->length) {
$page->appendChild($items->item(0));
}
$dom->getElementsByTagName(\'channel\')->item(0)->appendChild($page);
echo $dom->saveXML();
输出量
<?xml version=\"1.0\"?>
<channel> <page><item> <title>Advanced PHP Book</title> </item><item> <title>MySQL primer</title> </item><item> <title>C++ for beginners</title> </item></page></channel>
看见。