是否可以使用jquery $ .ajax添加,删除xml节点?

hh5*_*188 3 xml jquery add

我想删除一些节点或使用jQuery XML添加一些节点,我尝试它append,empty,remove但他们似乎没有工作,像(在$阿贾克斯):

success:function(xml){
    $(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>');
    $(xml).find("layout").empty();
}
Run Code Online (Sandbox Code Playgroud)

我也发现谷歌没有教程.所以我想知道是否可以使用jquery在xml中添加或删除节点?

好的,我详细写了,xml文件只保存在本地域中,因为这里的Database/UserConfig/config.xml是我的Ajax代码:

function layout_change()
{
    var $children=$input.children();

    $.ajax({
        type: "get",
        url: "Database/UserConfig/config.xml",
        dataType: "xml",
        timeout: 2000,
        beforesend:function(xml){
            $(xml).find("layout").empty();
        },
        success:function(xml){
            for(var i=0;i<$children.length;i++)
            {
                $(xml).find("layout").append('<app id="' + $children.eq(i).attr("id") + '"></app>');              
            }
        },
        error:function(){}
    });
}
Run Code Online (Sandbox Code Playgroud)

或者它可以用javascript完成?或者只能用C#这样的服务器语言来完成?......

这是我的demo xml:

<layout>
        <app id="id-4"></app>
        <app id="id-5"></app>
        <app id="id-6"></app>
        <app id="id-1"></app>
        <app id="id-2"></app>
        <app id="id-3"></app>   
</layout>
Run Code Online (Sandbox Code Playgroud)

and*_*wle 8

jQuery是一个用于在javascript中解析和操作XML的奇妙工具.事实上,jQuery的ajax API是基于这个构建的,这就是为什么你能够通过设置dataType参数来指定ajax调用的响应类型xml(尽管如果省略这个参数它们会尝试做一些自动检测) ).从参数的jQuery $.ajax()文档dataType:

"xml":返回可以通过jQuery处理的XML文档.

您可以使用jQuery尽可能多地解析和操作XML.我必须补充说,与服务器端XML库中的XPath查询相比,使用CSS选择器是很好的.

虽然empty并且remove按预期工作,但是在使用appendjQuery 等函数添加节点时会出现问题,无论出于何种原因(我还没有真正挖掘过这个),在附加到XML结构时不会为您创建元素(虽然这在HTML结构中工作正常).您可以通过将节点自己显式创建为DOM元素或jQuery对象,然后调用append以下内容来轻松解决此问题:

//Either of these will work
var elem = document.createElement('app');
xml.find('layout').append(elem); // Appends <app></app> to <layout>
xml.find('layout').append($('<app>')); // Does the same

// You can also you use other manipulation functions such as `attr`
xml.find('layout').append($('<app>').attr('id', 'ego'));
Run Code Online (Sandbox Code Playgroud)

但是,您的代码看起来还有其他问题会阻止它按预期运行.该$.ajax beforeSend回调,例如,通过在XMLHttpRequest物体的回调函数,而不是你的XML对象进行操作.结果是你empty在该回调中的调用什么都不做.

另外,如果你想操作的响应Database/UserConfig/config.xml中的beforeSend回调,它可能不会尚未存在,因为beforeSendAjax请求触发关闭之前被调用.xml您打算传入的参数可能是全局范围的,但是它在回调范围内被压扁,因为jQuery XMLHttpRequest正如我之前提到的那样传入.