php复制xml文件,在PHP中合并XML文件

我有2个文件1.xml和2.xml都具有相似的结构,我想有一个.我尝试了许多解决方案,但是我只有错误 – 坦白说,我不知道这些脚本是如何工作的.

1.XML:

1

Title 1

Author 1

...

2.XML:

190

Title 190

Author 190

...

我想使用以下结构创建一个新的文件merged.xml

1

Title 1

Author 1

... //items from 1.xml

190

Title 190

Author 190

... //items from 2.xml

我该怎么办?你能解释一下我做的吗?如何使用更多文件?谢谢

编辑

我试过什么

function mergeXML(&$base, $add)

{

if ( $add->count() != 0 )

$new = $base->addChild($add->getName());

else

$new = $base->addChild($add->getName(), $add);

foreach ($add->attributes() as $a => $b)

{

$new->addAttribute($a, $b);

}

if ( $add->count() != 0 )

{

foreach ($add->children() as $child)

{

mergeXML($new, $child);

}

}

}

$xml = mergeXML(simplexml_load_file('1.xml'), simplexml_load_file('2.xml'));

echo $xml->asXML(merged.xml);

?>

EDIT2

遵循诚实的建议,我研究了DOMDocument手册,并找到了一个例子:

function joinXML($parent, $child, $tag = null)

{

$DOMChild = new DOMDocument;

$DOMChild->load($child);

$node = $DOMChild->documentElement;

$DOMParent = new DOMDocument;

$DOMParent->formatOutput = true;

$DOMParent->load($parent);

$node = $DOMParent->importNode($node, true);

if ($tag !== null) {

$tag = $DOMParent->getElementsByTagName($tag)->item(0);

$tag->appendChild($node);

} else {

$DOMParent->documentElement->appendChild($node);

}

return $DOMParent->save('merged.xml');

}

joinXML('1.xml', '2.xml')

但是它会创建错误的xml文件:

1

Title 1

Author 1

...

190

Title 190

Author 190

...

我不能正确使用这个文件.我需要正确的结构,在这里我有一种将一个文件粘贴到另一个文件.我想“粘贴”唯一的项目不是所有的标签.我该怎么改?

EDIT3

这里是一个答案 – 基于Torious答案 – 只是适应我的需要 – 检查//编辑

$doc1 = new DOMDocument();

$doc1->load('1.xml');

$doc2 = new DOMDocument();

$doc2->load('2.xml');

// get 'res' element of document 1

$res1 = $doc1->getElementsByTagName('items')->item(0); //edited res - items

// iterate over 'item' elements of document 2

$items2 = $doc2->getElementsByTagName('item');

for ($i = 0; $i < $items2->length; $i ++) {

$item2 = $items2->item($i);

// import/copy item from document 2 to document 1

$item1 = $doc1->importNode($item2, true);

// append imported item to document 1 'res' element

$res1->appendChild($item1);

}

$doc1->save('merged.xml'); //edited -added saving into xml file

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值