使用新的DomDocument将2个不同的xml元素合并为1个xml元素 [英] Merge 2 different xml elements into 1 xml element using new DomDocument

查看:55
本文介绍了使用新的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆