douxuan4556 2015-11-17 20:13
浏览 43
已采纳

PHP中的XML克隆节点

I have to clone an XML node and its childs and append it to a new XML in a specifics tag.

Ie:

Source XML:

<root>
  <element>
    <back>
    <item1>ABC</item1>
    <item2>DEF</item2>
    <more>
      <moreitem>GHI</moreitem>
    </more
    </back>
  </element>
</root>

Destination XML:

<root>
  <base1>
    <item1>FOO</item1>
    <item2>BAR</item2>
  <base2>
    **<back>From source XML and all its childs here</back>**
  </base2>
  </base1>
<root>
  • 写回答

3条回答 默认 最新

  • duanping5306 2015-11-17 20:29
    关注

    DOMXpath::evaluate() allows you to fetch nodes using Xpath expressions. DOMDocument::importNode() duplicates a node and imports a node into a target document. DOMNode::cloneNode() create a duplicate of node to add in the same document. DOMNode::appendChild() allows you to append the imported/cloned node.

    $source = <<<'XML'
    <root>
      <element>
        <back>
        <item1>ABC</item1>
        <item2>DEF</item2>
        <more>
          <moreitem>GHI</moreitem>
        </more>
        </back>
      </element>
    </root>
    XML;
    
    $target = <<<'XML'
    <root>
      <base1>
        <item1>FOO</item1>
        <item2>BAR</item2>
        <base2>
        </base2>
      </base1>
    </root>
    XML;
    
    $sourceDocument = new DOMDocument();
    $sourceDocument->loadXml($source);
    $sourceXpath = new DOMXpath($sourceDocument);
    
    $targetDocument = new DOMDocument();
    $targetDocument->loadXml($target);
    $targetXpath = new DOMXpath($targetDocument);
    
    foreach ($targetXpath->evaluate('/root/base1/base2[1]') as $targetNode) {
      foreach ($sourceXpath->evaluate('/root/element/back') as $backNode) {
        $targetNode->appendChild($targetDocument->importNode($backNode, TRUE));
      }
    }
    
    echo $targetDocument->saveXml();
    

    Output:

    <?xml version="1.0"?>
    <root>
      <base1>
        <item1>FOO</item1>
        <item2>BAR</item2>
        <base2>
          <back>
            <item1>ABC</item1>
            <item2>DEF</item2>
            <more>
              <moreitem>GHI</moreitem>
            </more>
          </back>
        </base2>
      </base1>
    </root>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签)
  • ¥50 sft下载大文阻塞卡死
  • ¥15 机器人轨迹规划相关问题