这不容易,我正在寻找同样的。。。其中一个问题是识别哪个iphone是什么意思等等。。虽然存在合并功能,但在我的案例中,它们都不能很好地工作:
http://www.php.net/manual/de/ref.simplexml.php#92272
当你还没有找到解决办法的时候,我想是时候亲自去做并向你报告:
更新1:
功能
xml_attribute
addxmlelement
都是从普通的php页面(和我复制到最后)。我写的函数是非常个别的一个案例,并不是适用于所有的合并情况。我为我创作了一部小说。
XML:Neu(新增)
<varrDaten>
<person>
<street id="adder">adder</street>
<loc>land AAA</loc>
</person>
<person>
<street id="exister">exister street</street>
<loc>land gg</loc>
</person>
<person>
<street id="updater">street is uptodate</street>
<loc>land is updated</loc>
</person>
</varrDaten>
<varrDaten>
<person>
<street id="minuser">minuser</street>
<loc>land 0</loc>
</person>
<person>
<street id="exister">exister street</street>
<loc>land lon</loc>
</person>
<person>
<street id="updater">update need street</street>
<loc>land need update</loc>
</person>
</varrDaten>
function simplexml_merge2($xpOld,$xpNeu)
{
$selIDS=$xpNeu->xpath('//street[not(@id="0")]');
foreach($selIDS as $ident)
{
//existiert in vorhandennen?
$xpSelV=$xpOld->xpath('//person/street[@id="'.xml_attribute($ident,'id').'"]');
if(count($xpSelV)>0)
{
echo "YES EXISTS".(string)$xpSelV[0][0]."<>".(string)$ident[0]."
";
//test of value maybe..
if(!((string)$xpSelV[0][0]==(string)$ident[0]))
{
//HERE YOU CAN ADD CRITERIA WHICH SHOULD BE SYCNRONISED IF ALREADY EXISTS
echo "VAL not the same";
$xp2Ef=$xpOld->xpath('//person[./street[@id="'.xml_attribute($ident,'id').'"]]');
$xp2Ef[0][0]=(string)$ident[0];
}
}
else
{
echo "NOOO:".$xpNeu[0];
$xpEF=$xpOld->xpath('//varrDaten');
echo '//person[./street[@id="'.xml_attribute($ident,'id').'"]]';
$xp2Ef=$xpNeu->xpath('//person[./street[@id="'.xml_attribute($ident,'id').'"]]');
AddXMLElement($xpEF[0],$xp2Ef[0]);
}
}
}
添加。函数
function xml_attribute($object, $attribute)
{
if(isset($object[$attribute]))
return (string) $object[$attribute];
else
return false;
}
function AddXMLElement(SimpleXMLElement $dest, SimpleXMLElement $source)
{
$new_dest = $dest->addChild($source->getName(), $source[0]);
foreach ($source->attributes() as $name => $value)
{
$new_dest->addAttribute($name, $value);
}
foreach ($source->children() as $child)
{
AddXMLElement($new_dest, $child);
}
}