Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按属性合并SimpleXML元素_Php_Xml_Simplexml - Fatal编程技术网

Php 按属性合并SimpleXML元素

Php 按属性合并SimpleXML元素,php,xml,simplexml,Php,Xml,Simplexml,我有2个simplexmlements。它们都有相同的元素(相同的ID属性),但标记不同,我想将它们合并在一起 是否有任何SimpleXML函数可用于执行此操作,或者我必须循环所有元素以生成新的SimpleXML元素 文件1 一些价值 其他价值 价值 另一个价值 文件2 价值 价值2 价值 价值 我想知道最后会怎样 <Elements> <Element ID="352"> <SomeTag35>Some value</S

我有2个
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();