使用javascript从xml中删除子节点

时间:2016-03-18 12:34:06

标签: javascript jquery xml

我正在尝试从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;
                }
            });

我会感激任何帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

您遇到的问题是您尝试将jQuery对象用作DOM节点:

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

要使用jQuery,你可以

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

然而,我认为你可能会走错路。我发现您已宣布var text未在代码中的任何位置使用过。{1}}您可能想要执行以下操作:

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

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

答案 1 :(得分:1)

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
});

答案 2 :(得分:0)

尝试过这个吗?

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