【问题标题】:Appending an Element multiple times in DOMDocument在 DOMDocument 中多次附加元素
【发布时间】:2013-09-27 13:26:26
【问题描述】:

有没有办法在 PHP 的 DOMDOCUMENT 中使用重复的子元素?就我而言,账单和运输信息将始终相同。例如:

$fullname = "John Doe";
$xml = new DOMDocument();
$xml_billing = $xml->createElement("Billing");
$xml_shipping = $xml->createElement("Shipping");
$xml_fullname = $xml->createElement("FullName");
$xml_fullname->nodeValue = $fullname;
$xml_billing->appendChild($xml_fullname);
$xml_shipping->appendChild($xml_fullname);

但是,在这种情况下,它会从 Billing 中删除该元素并仅将其保留在 Shipping 中。

【问题讨论】:

    标签: php domdocument


    【解决方案1】:

    这对您来说可能并不明显,但如果您将 相同的 元素附加到另一个父元素,它会在 DOMDocument 中移动。

    您可以通过使用创建的 FullName 元素作为原型轻松防止这种情况发生,并将其克隆用于追加操作:

    $xml_billing->appendChild(clone $xml_fullname);
    $xml_shipping->appendChild(clone $xml_fullname);
    

    如果我正确阅读了您的问题,那么这就是您想要实现的目标。


    我刚刚看到的另一个提示:以下两行:

    $xml_fullname = $xml->createElement("FullName");
    $xml_fullname->nodeValue = $fullname;
    

    你可以写成一个:

    $xml_fullname = $xml->createElement("FullName", $fullname);
    

    希望这会有所帮助。

    【讨论】:

    • ((另一个问题,利用上下文)) clone的使用相当于importNode,$xml_billing->appendChild( $xml_billing->ownerDocument->importNode( $xml_fullname) )?还是有什么不同?
    • 感谢 hakre 的澄清!
    • @PeterKrauss:问得好。我不这么认为,因为importNode() 确实允许从 different 文档中获取节点,而在此示例中,克隆用于 same 文档中的元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2020-09-11
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多