Php 按属性合并SimpleXML元素
我有2个Php 按属性合并SimpleXML元素,php,xml,simplexml,Php,Xml,Simplexml,我有2个simplexmlements。它们都有相同的元素(相同的ID属性),但标记不同,我想将它们合并在一起 是否有任何SimpleXML函数可用于执行此操作,或者我必须循环所有元素以生成新的SimpleXML元素 文件1 一些价值 其他价值 价值 另一个价值 文件2 价值 价值2 价值 价值 我想知道最后会怎样 <Elements> <Element ID="352"> <SomeTag35>Some value</S
simplexmlement
s。它们都有相同的元素(相同的ID属性),但标记不同,我想将它们合并在一起
是否有任何SimpleXML函数可用于执行此操作,或者我必须循环所有元素以生成新的SimpleXML元素
文件1
一些价值
其他价值
价值
另一个价值
文件2
价值
价值2
价值
价值
我想知道最后会怎样
<Elements>
<Element ID="352">
<SomeTag35>Some value</SomeTag35>
<SomeTag99>Some other value</SomeTag99>
<SomeTag15>Value</SomeTag15>
<SomeTag44>Value</SomeTag44>
</Element>
<Element ID="353">
<SomeTag35>A value</SomeTag35>
<SomeTag99>Another value</SomeTag99>
<SomeTag15>Value</SomeTag15>
<SomeTag44>Value</SomeTag44>
</Element>
</Elements>
一些价值
其他价值
价值
价值
价值
另一个价值
价值
价值
SimpleXML非常适合做这样的简单任务。其思想是读取第一个文档,然后使用XPath在第二个文档中找到相应的元素。然后将第二个文档中的元素复制到第一个文档中
$doc1 = simplexml_load_file('file1.xml');
$doc2 = simplexml_load_file('file2.xml');
foreach ( $doc1 as $element ) {
$extraData = $doc2->xpath("//Element[@ID=\"{$element['ID']}\"]");
foreach ( $extraData[0]->children() as $newElements ){
$element->addChild($newElements->getName(), (string)$newElements);
}
}
echo $doc1->asXML();
请注意,这仅适用于简单结构。如果您的文档有嵌套的数据或属性,最好使用DOMDocument,您可以使用
importNode
复制节点,这允许您复制包含所有子元素的内容。这非常有效。很抱歉,我目前没有足够的声誉来支持你的答案,但非常感谢你
<Elements>
<Element ID="352">
<SomeTag35>Some value</SomeTag35>
<SomeTag99>Some other value</SomeTag99>
<SomeTag15>Value</SomeTag15>
<SomeTag44>Value</SomeTag44>
</Element>
<Element ID="353">
<SomeTag35>A value</SomeTag35>
<SomeTag99>Another value</SomeTag99>
<SomeTag15>Value</SomeTag15>
<SomeTag44>Value</SomeTag44>
</Element>
</Elements>
$doc1 = simplexml_load_file('file1.xml');
$doc2 = simplexml_load_file('file2.xml');
foreach ( $doc1 as $element ) {
$extraData = $doc2->xpath("//Element[@ID=\"{$element['ID']}\"]");
foreach ( $extraData[0]->children() as $newElements ){
$element->addChild($newElements->getName(), (string)$newElements);
}
}
echo $doc1->asXML();