我想比较PHP中的两个xml文件(实际上是按第二个过滤一个),一个xml文件包含例如" interfaces"数据另一个包含接口(rule.xml),但只有我想要的更少的元素,并希望获得两个xmls中的过滤数据。
第一个xml:
`<?xml version="1.0" encoding="UTF-8"?>
<data>
<interfaces>
<interface>
<name><!-- type: string --></name>
<type><!-- type: string --></type>
<mtu><!-- type: int32 --></mtu>
<interface>
</interfaces>
</data>`
第二个xml:
`<?xml version="1.0" encoding="UTF-8"?>
<data>
<interfaces>
<interface>
<name>interfacename</name>
<type>gigaeth</type>
<mtu>1500</mtu>
<counters>
<inBytes>17800</inBytes>
<inPackets>156000</inPackets>
<inErrors>850</inErrors>
</counters>
</interface>
</interfaces>
</data>`
所以我想要的结果是:
`<?xml version="1.0" encoding="UTF-8"?>
<data>
<interfaces>
<interface>
<name>interfacename</name>
<type>gigaeth</type>
<mtu>1500</mtu>
</interface>
</interfaces>
</data>`
答案 0 :(得分:2)
使用simplexml以递归方式同步遍历两个xml树。在第一个xml的叶节点检查同一节点在第二个节点中出现并更改值
$xml1 = new SimpleXMLElement($str1);
$xml2 = new SimpleXMLElement($str2);
function set(&$xml, $xml2) {
foreach($xml as $key => $xmlpos) {
if (isset($xml2->$key))
if($xmlpos->count()) set($xmlpos, $xml2->$key);
else $xml->$key = $xml2->$key;
}
}
set($xml1, $xml2);
echo $xml1->saveXML();