【问题标题】:How can I remove the text of a node without removing child nodes?如何在不删除子节点的情况下删除节点的文本?
【发布时间】:2023-04-03 03:42:01
【问题描述】:

我正在从数据库中的值创建 XML 文档。最初,程序会导出这个 XML:

<customDataElementlanguage>English</customDataElementlanguage>

我创建了这个 PHP 来更改 XML 树:

    if ($Element->nodeValue = "EN") { $Element->nodeValue = "English"; }

    $doc2 = $Element->ownerDocument;
    $titleElement = $doc2->createElement('title','language');
    $valueElement = $doc2->createElement('value',$Element->nodeValue);
    $Element->appendChild($titleElement);
    $Element->appendChild($valueElement);
    //$Element->nodeValue="";

进入这个:

<customDataElementlanguage>
English
<title>language</title>
<value>English</value>
</customDataElementlanguage>

我的问题是我似乎无法找到一种方法来从节点中删除“英文”文本,而无需清除内部的子节点 titlevalue。当我用$Element-&gt;nodeValue="";结束我的PHP代码时会发生这种情况

我还想将 customDataElemementlanguage 节点的名称更改为 customDataElement,但我想我可以稍后再处理 :)

【问题讨论】:

    标签: php dom text element


    【解决方案1】:

    嗯,最简单的方法是将nodeValue 存储在一个临时变量中并取消设置nodeValue创建其他节点之前。

    $lang = $Element->nodeValue;
    $Element->nodeValue = "";
    $doc2 = $Element->ownerDocument;
    $titleElement = $doc2->createElement('title','language');
    $valueElement = $doc2->createElement('value', $lang);
    $Element->appendChild($titleElement);
    $Element->appendChild($valueElement);
    

    但您也应该能够通过

    删除 DOMText 节点
    $Element->removeChild($Element->childNodes->item(0));
    

    在最后。

    【讨论】:

    • 非常感谢,很好很简单!让我开心。
    • 好的,现在第二个问题比我想象的要大... renameNode() 在 DOM 2 中不存在(“尚未实现”),所以我将开始另一个问题.
    猜你喜欢
    • 2021-05-10
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多