使用新的DomDocument将2个不同的xml元素合并为1个xml元素 [英] Merge 2 different xml elements into 1 xml element using new DomDocument
本文介绍了使用新的DomDocument将2个不同的xml元素合并为1个xml元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个看起来像这样的XML文件:
I have a XML file which looks like this:
坦白地说,我不知道这些脚本是如何工作的。
frankly speaking I have no idea how those scripts worked.
<?xml version="1.0" encoding="UTF-8"?>
<resource>
<languages>
<language>en</language>
<page1>
<full_content_text>Full Content Text 1</full_content_text>
</page1>
<page2>
<full_content_text>Full Content Text 2</full_content_text>
</page2>
</languages>
<languages>
<language>tc</language>
<page1>
<full_content_text>Full Content Text tc version 1</full_content_text>
</page1>
<page2>
<full_content_text>Full Content Text tc version 2</full_content_text>
</page2>
</languages>
</resource>
我想输出如下:
我要合并page1和page2元素成为页面元素
I want to merge the page1 and page2 elements to become page element
<?xml version="1.0" encoding="UTF-8"?>
<resource>
<languages>
<language>en</language>
<page>
<full_content_text>Full Content Text 1 Full Content Text 2</full_content_text>
</page>
</languages>
<languages>
<language>tc</language>
<page>
<full_content_text>Full Content Text tc version 1 Full Content Text tc version 2</full_content_text>
</page>
</languages>
</resource>
代码如下:
$xml = ('test.xml');
$dom = new DomDocument();
$dom->load($xml);
$nodes = $dom->documentElement;
$data = $nodes->getElementsByTagName('languages');
foreach($data as $key => $row){
$page1 = $row->getElementsByTagName('page1')->item(0);
$page2 = $row->getElementsByTagName('page2');
foreach($page2 as $res){
echo '<pre>';
print_r($res);
echo '</pre>';
}
$page = $dom->createElement('page', 'Merge Page1 and Page2 Here');
$row->appendChild($page);
}
$dom->save("merged.xml");
推荐答案
根据您的代码,解决方案不远。我将这样做:
According to your code, you are not far the solution. This is how I will do it:
$dom = new DOMDocument();
$dom->loadXML($xml);
$languagesTags = $dom->getElementsByTagName('languages');
foreach ($languagesTags as $languagesTag) {
$txtNodes = $languagesTag->getElementsByTagName('full_content_text');
$newTextNode = $dom->createTextNode($txtNodes->item(0)->textContent . ' '
. $txtNodes->item(1)->textContent);
$page1 = $dom->getElementsByTagName('page1')->item(0);
$page2 = $dom->getElementsByTagName('page2')->item(0);
$languagesTag->removeChild($page1);
$languagesTag->removeChild($page2);
$newPageTag = $dom->createElement('page');
$newFullTextTag = $dom->createElement('full_text_content');
$newFullTextTag->appendChild($newTextNode);
$newPageTag->appendChild($newFullTextTag);
$languagesTag->appendChild($newPageTag);
}
$xml = $dom->saveXML();
echo htmlspecialchars($xml);
这篇关于使用新的DomDocument将2个不同的xml元素合并为1个xml元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文