【问题标题】:SimpleXMLElement - addChild instanceSimpleXMLElement - addChild 实例
【发布时间】:2019-03-15 13:03:57
【问题描述】:

我有 2 个 SimpleXmlElement 实例,例如:

$xmlMain = new SimpleXmlElement('<user><name></name></user>');

$xmlPart = new SimpleXmlElement('<user_details...</user_details>');

我可以在$xmlMain 内的某处插入$xmlPart 元素吗?

我希望结果是在$xmlMain 中注入$xmlPart 实例,所以结果是

<user><name><user_details>...</user_details></name></user>

【问题讨论】:

    标签: php xml


    【解决方案1】:

    SimpleXML 不太擅长将数据从一个节点复制到另一个节点。您可以改为使用 DOMDocument 方法,首先将 SimpleXMLElements 导入 DOMNodes,然后将第二个节点导入到第一个节点的文档中,然后将其附加到 name 元素...

    $xmlMain = new SimpleXmlElement('<user><name></name></user>');
    
    $xmlPart = new SimpleXmlElement('<user_details>...</user_details>');
    
    // Import xmlMain <name> element into a DOMNode
    $xmlMD = dom_import_simplexml($xmlMain->name);
    // Import xmlPart into DOMNode and then import that node into the xmlMD document
    $importedNode = $xmlMD->ownerDocument->importNode(dom_import_simplexml($xmlPart), true);
    // Add the imported node into the first node (the <name> element)
    $xmlMD->appendChild($importedNode);
    
    echo $xmlMain->asXML();
    

    这会给...

    <?xml version="1.0"?>
    <user><name><user_details>...</user_details></name></user>
    

    一种更简单的替代方法是首先在$xmlMain 文档中创建$xmlPart 元素...

    $xmlMain = new SimpleXmlElement('<user><name></name></user>');
    $userDetails = $xmlMain->name->addChild("user_details");
    $userDetails->addChild("name", "Fred");
    
    echo $xmlMain->asXML();
    

    创造...

    <?xml version="1.0"?>
    <user><name><user_details><name>Fred</name></user_details></name></user>
    

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 2019-04-19
      • 2012-12-24
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多