开发者

XML reforming with DOM

I am trying to reformat XML adding intermediate level node.

Here is what I have as input:

<channel> <item> <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </channel>

I need it to be like that at the end (page node added between channel and item):

<channel> <page> <item> 开发者_JS百科 <title>Advanced PHP Book</title> </item> <item> <title>MySQL primer</title> </item> <item> <title>C++ for beginners</title> </item> </page> </channel>

Here is my testing code:


$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(); 

The problem I have is that channel element is doubled. Please help.


I don't think this should be too hard: I think you're overcomplicating it by using the simplexml stuff.

$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();

Output

<?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>

See it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜