【问题标题】:PHP 7.1 XML domDocument clone node with subnodesPHP 7.1 XML domDocument 克隆节点与子节点
【发布时间】:2018-12-20 16:14:25
【问题描述】:

我必须用 PHP 和 DomDocument 解决这个问题(simplexml 也可以)。 我用谷歌搜索了很多,但没有找到一个正确的例子来学习如何做:

我有以下 eBay XML

<?xml version="1.0" encoding="utf-8"?>
<ReviseInventoryStatusRequest xmlns="urn:ebay:apis:eBLBaseComponents">
  <RequesterCredentials>
    <eBayAuthToken>INSERT_TOKEN</eBayAuthToken>
  </RequesterCredentials>
  <InventoryStatus>
    <ItemID> ItemIDType (string) </ItemID>
    <Quantity> int </Quantity>
    <SKU> SKUType (string) </SKU>
    <StartPrice> AmountType (double) </StartPrice>
  </InventoryStatus>
  <ErrorLanguage>en-US</ErrorLanguage>
  <Version> string </Version>
  <WarningLevel>Low</WarningLevel>
</ReviseInventoryStatusRequest>

我需要克隆(实际上是 4 次)&lt;InventoryStatus&gt; 节点及其所有子节点:

  <InventoryStatus>
    <ItemID> ItemIDType (string) </ItemID>
    <Quantity> int </Quantity>
    <SKU> SKUType (string) </SKU>
    <StartPrice> AmountType (double) </StartPrice>
  </InventoryStatus>

并在当前节点下追加

能否给点提示

谢谢!

【问题讨论】:

    标签: php xml domdocument php-7.1 clonenode


    【解决方案1】:

    DOMDocument 在处理这样的事情上要好得多,可以只用cloneNode() 克隆节点,传递true 会进行深度克隆,它也会复制内容。然后,您可以将节点添加回您需要的位置...

    $dom = new DOMDocument();
    $dom->load("data.xml");
    
    $is = $dom->getElementsByTagName("InventoryStatus");
    $dom->documentElement->appendChild($is[0]->cloneNode(true));
    $dom->documentElement->appendChild($is[0]->cloneNode(true));
    $dom->documentElement->appendChild($is[0]->cloneNode(true));
    $dom->documentElement->appendChild($is[0]->cloneNode(true));
    echo $dom->saveXML();
    

    【讨论】:

    • 哇!如此简单 :-( 好的,我还能够修改所有克隆节点的所有子节点的值,并从 dom 中删除节点并使用 insertbefore 但未成功从 $is 中删除节点.. 我可以也问你这个问题谢谢
    • 当你说删除一个节点时,你能举一个你想删除的例子吗?
    • 数量:我做了这个但没有用:` $Q = $is->getElementsByTagName("Quantity"); $Q->parentNode->removeChild($Q); `
    • $is 是一个DOMNodeList,如果你想使用它,那么在调用cloneNode() 时你需要使用$is[0]
    • 我明白了.. 我做了很多测试,我确定我在很多地方都放了 [0].. 我也确定在这一点上.. 但是因为我再次检查..在这种情况下,错误在后一条指令中:$Q-&gt;parentNode-&gt;removeChild($Q);
    猜你喜欢
    • 2016-02-19
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多