php中怎么将两个结构相同的XML合并成一个?

时间:2021-03-26 14:51:06
有以下两个相同结构的XML,我现在需要将第1个XML下面的xueshengmen节点下面的所有数据添加到第2个XML下面的xueshengmen节点中。你懂的~

<?xml version="1.0" encoding="utf-8" ?>
<AllData>
<xueshengmen>
<xuesheng>
  <name>张三</name>
  <yuwen>80</yuwen>
  <shuxue>90</shuxue>
  <yingyu>70</yingyu>
</xuesheng>
<xuesheng>
  <name>李四</name>
  <yuwen>60</yuwen>
  <shuxue>90</shuxue>
  <yingyu>75</yingyu>
</xuesheng>
</xueshengmen>
</AllData>

6 个解决方案

#1


有会的吗?在线等

#2


人呢?

#3


一般对xml做工作的时候,我们需要详细的"结构"  (DTD 或 xml schema)

比如,xueshengmen是否一个文件只有一个, 是否必须在AllData下面,
是否一定有该元素,

xuesheng是否是xueshengmen的唯一元素, 
是否有数量上限,是否需要排序,是否不能重复,如何判断重复(同一个name的是否看做重复的)

........


#4


其实不用考虑那么复杂,就是两个一模一样的XML,将第一个的xueshengmen下面的所有节点追加到第二个XML下面就行了~

#5




<?php

$xml1 = <<<XML
<?xml version="1.0" encoding="utf-8" ?>
<AllData>
<xueshengmen>
<xuesheng>
  <name>张三</name>
  <yuwen>80</yuwen>
  <shuxue>90</shuxue>
  <yingyu>70</yingyu>
</xuesheng>
<xuesheng>
  <name>李四</name>
  <yuwen>60</yuwen>
  <shuxue>90</shuxue>
  <yingyu>75</yingyu>
</xuesheng>
</xueshengmen>
</AllData>

XML;

$xml2 = <<<XML
<?xml version="1.0" encoding="utf-8" ?>
<AllData>
<xueshengmen>
<xuesheng>
  <name>王五</name>
  <yuwen>40</yuwen>
  <shuxue>90</shuxue>
  <yingyu>70</yingyu>
</xuesheng>
<xuesheng>
  <name>赵六</name>
  <yuwen>60</yuwen>
  <shuxue>80</shuxue>
  <yingyu>75</yingyu>
</xuesheng>
</xueshengmen>
</AllData>

XML;

$dom1 = new DOMDocument('1.0', 'utf-8');
$dom1->loadXML($xml1);

$dom2 = new DOMDocument('1.0', 'utf-8');
$dom2->loadXML($xml2);

$xueshengmen1 = $dom1->getElementsByTagName('xueshengmen')->item(0);
$xueshengmen2 = $dom2->getElementsByTagName('xueshengmen')->item(0);

//循环添加
foreach($xueshengmen1->childNodes as $node) {
$node = $dom2->importNode($node, true);
$xueshengmen2->appendChild($node);
}

var_dump($dom2->saveXML());



#6


用PHP的XML操作函数先循环读出2个XML的数据部分:
<xuesheng>
  <name>张三</name>
  <yuwen>80</yuwen>
  <shuxue>90</shuxue>
  <yingyu>70</yingyu>
</xuesheng>
然后再用字符串操作组合2个XML数据部分,再用FSO文件操作函数组合成一个XML。思路大概就是这样:!

#1


有会的吗?在线等

#2


人呢?

#3


一般对xml做工作的时候,我们需要详细的"结构"  (DTD 或 xml schema)

比如,xueshengmen是否一个文件只有一个, 是否必须在AllData下面,
是否一定有该元素,

xuesheng是否是xueshengmen的唯一元素, 
是否有数量上限,是否需要排序,是否不能重复,如何判断重复(同一个name的是否看做重复的)

........


#4


其实不用考虑那么复杂,就是两个一模一样的XML,将第一个的xueshengmen下面的所有节点追加到第二个XML下面就行了~

#5




<?php

$xml1 = <<<XML
<?xml version="1.0" encoding="utf-8" ?>
<AllData>
<xueshengmen>
<xuesheng>
  <name>张三</name>
  <yuwen>80</yuwen>
  <shuxue>90</shuxue>
  <yingyu>70</yingyu>
</xuesheng>
<xuesheng>
  <name>李四</name>
  <yuwen>60</yuwen>
  <shuxue>90</shuxue>
  <yingyu>75</yingyu>
</xuesheng>
</xueshengmen>
</AllData>

XML;

$xml2 = <<<XML
<?xml version="1.0" encoding="utf-8" ?>
<AllData>
<xueshengmen>
<xuesheng>
  <name>王五</name>
  <yuwen>40</yuwen>
  <shuxue>90</shuxue>
  <yingyu>70</yingyu>
</xuesheng>
<xuesheng>
  <name>赵六</name>
  <yuwen>60</yuwen>
  <shuxue>80</shuxue>
  <yingyu>75</yingyu>
</xuesheng>
</xueshengmen>
</AllData>

XML;

$dom1 = new DOMDocument('1.0', 'utf-8');
$dom1->loadXML($xml1);

$dom2 = new DOMDocument('1.0', 'utf-8');
$dom2->loadXML($xml2);

$xueshengmen1 = $dom1->getElementsByTagName('xueshengmen')->item(0);
$xueshengmen2 = $dom2->getElementsByTagName('xueshengmen')->item(0);

//循环添加
foreach($xueshengmen1->childNodes as $node) {
$node = $dom2->importNode($node, true);
$xueshengmen2->appendChild($node);
}

var_dump($dom2->saveXML());



#6


用PHP的XML操作函数先循环读出2个XML的数据部分:
<xuesheng>
  <name>张三</name>
  <yuwen>80</yuwen>
  <shuxue>90</shuxue>
  <yingyu>70</yingyu>
</xuesheng>
然后再用字符串操作组合2个XML数据部分,再用FSO文件操作函数组合成一个XML。思路大概就是这样:!