使用 JavaScript 从 XML 中删除子节点

remove child nodes from xml with javascript

本文关键字:删除 子节点 XML JavaScript 使用      更新时间:2023-09-26

我正在尝试从xml文件文本中读取并删除该文本所在的节点。例如,我从<en><es>节点读取文本,我需要删除这两个节点并将文本保存到<translation>

编辑前的 XML 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<books>
    <name>
        <translation>
            <en>
                Text 1
            </en>
            <es>
                Text 2
            </es>
        </translation>
    </name>
</books>

所以它应该看起来像这样:

<books>
    <translation>
            Text 1
    </translation>
</books>

这是我函数的一部分,从<en>读取文本后,我试图从<translation>中删除所有子节点,但是当我使用 removeChild 方法时我卡住了并收到错误

        var lang = 'en';
        $.ajax({
            type: "GET",
            url: 'my.xml',
            dataType: "xml",
            success: function (xml) {
                $(xml).find('translation').each(function () {
                    var text = $(this).find(lang).text();
                });
                $(xml).getElementsByTagName('translation').parentNode.removeChild();
                 // xml convert to json
                    var books = [];
                    var data = $.xml2json(xml)['#document'];
                    that.books = data.books;
                }
            });

我将不胜感激任何帮助。谢谢!

var value = [];
$.get("your.xml", function(d){
    values.push($(d).find("en")[0].childNodes[0]);  //push "Text 1" into array
    $(d).find("en").remove();                       //remove node
    $(d).find("es").remove();                       //remove node
    $(d).find("translation").append(values[0]);     //add "Text 1" to node
});

您遇到的问题是您尝试在此处使用 jQuery 对象作为 DOM 节点:

$(xml).getElementsByTagName('translation').parentNode.removeChild();

要使用jQuery,你可以这样做

$(xml).find('translation').remove();

但是,我认为您可能正在走上一条错误的道路。我看到您已经声明了一个未在代码中任何地方使用的var text。您可能希望执行以下操作:

$xml = $(xml);
$xml.find('translation').each(function () {
    $this = $(this);
    $this.text($this.find(lang).text());
});
// do something with $xml...

我无法xml2json工作,因为我不熟悉该插件,但它对您来说应该相对简单。

试过这个吗?

getElementsByTagName('translation').children().remove()