我有这两个xml文档:
<outer>
<foo>
<foo-child name="fA" special="true">
content of fA
</foo-child>
<foo-child name="fB">
content of fB
</foo-child>
</foo>
<bar>
<bar-child name="bA">
content of bA
</bar-child>
<bar-child name="bB" special="true">
content of bB
</bar-child>
</foo>
</outer>
<outer>
<foo>
<foo-child name="fA">
newer and improved content of fA
</foo-child>
<foo-child name="fC">
content of fC
</foo-child>
</foo>
<bar>
<bar-child name="bA" really-special="true" />
<bar-child name="bB" special="false">
Despecialized content of bB
</bar-child>
</foo>
</outer>
我想将它们合并在一起,以便文档2中的元素覆盖文档1中具有相同name
属性的元素。如果第二个文档中不存在任何属性或内容,则从第一个文档继承。所以:
<outer>
<foo>
<foo-child name="fA" special="true">
newer and improved content of fA
</foo-child>
<foo-child name="fB">
content of fB
</foo-child>
<foo-child name="fC">
content of fC
</foo-child>
</foo>
<bar>
<bar-child name="bA" really-special="true">
content of bA
</bar-child>
<bar-child name="bB">
Despecialized content of bB
</bar-child>
</foo>
</outer>
我的目的是使用PHP在服务器端执行此操作。
但是,我不确定这是DomDocument
还是SimpleXML的工作。我还没有真正使用过,并继续思考“我希望我有jQuery”。
这个问题有一个简单的解决方案吗?
答案 0 :(得分:0)
选择SimpleXML是正确的道路,可能更容易。这是一个关于如何使用它的好教程:
答案 1 :(得分:0)
现在链接很好。我同意Sarfraz的说法,这是一个很好的解决方案,可以通过PHP manual page的评论将XML与SImpleXML合并,同时也可以使用属性:
function append_simplexml(&$simplexml_to, &$simplexml_from)
{
foreach ($simplexml_from->children() as $simplexml_child)
{
$simplexml_temp = $simplexml_to->addChild($simplexml_child->getName(), (string) $simplexml_child);
foreach ($simplexml_child->attributes() as $attr_key => $attr_value)
{
$simplexml_temp->addAttribute($attr_key, $attr_value);
}
append_simplexml($simplexml_temp, $simplexml_child);
}
}
还有使用样本。