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

标签 jquery xml add

我想用jquery在xml中删除一些节点或添加一些节点, 我尝试使用 appendemptyremove 但它们似乎都不起作用, 像(在 $.ajax 中):

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

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

OK,我写的很详细,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(){}
    });
}

还是可以用javascript来完成?还是只能用C#之类的服务器语言来完成?……

这是我的演示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>

最佳答案

jQuery 是在 javascript 中解析和操作 XML 的绝佳工具。事实上,jQuery 的 ajax API 在构建时就考虑到了这一点,这就是为什么您可以通过将 dataType 参数设置为 xml 来指定 ajax 调用的响应类型的原因(尽管如果省略此参数,他们确实会尝试进行一些自动检测)。来自 dataType 参数的 jQuery $.ajax() 文档:

"xml": Returns a XML document that can be processed via jQuery.

您可以使用 jQuery 尽可能多地解析和操作 XML。我必须补充一点,与服务器端 XML 库中的 XPath 查询相比,使用 CSS 选择器非常棒。

虽然 emptyremove 按预期工作,但在使用 append 等函数动态添加节点时会遇到问题:jQuery,不管怎样原因(我还没有真正深入研究),在附加到 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'));

但是,您的代码似乎存在其他问题,这些问题会阻止它按预期运行。例如,$.ajax beforeSend 回调将 XMLHttpRequest 对象传递给回调函数,而不是要操作的 XML 对象。结果是该回调中的 empty 调用不执行任何操作。

此外,如果您试图在 beforeSend 回调中操作 Database/UserConfig/config.xml 的响应,它可能还不存在,因为beforeSend 在 ajax 请求被触发之前被调用。您打算传入的 xml 参数可能在全局范围内,但它在回调的范围内被压缩,因为 jQuery 正在传入 XMLHttpRequest,正如我之前提到的。

关于jquery - 是否可以使用 jquery $.ajax 添加、删除 xml 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262960/

相关文章:

如果没有 h3 标签,JQuery Accordion 将无法工作

r - 使用类似于 xpath 的方式访问 R 中列表的元素

javascript - AJAX 不会 POST 到 URL

PHP 将值 1 添加到数组中的某个位置

php - 如何检查是否一个接一个地设置直到完成

JavaScript 添加日期函数

javascript - 如何将复选框与 jquery 一起使用来获取打印值?

jquery - jQuery 选择列表选项通过另一个元素 onchange 事件更改后触发事件

jquery - 在有几个 div 的表单内选择输入

xml - 以结构化数据格式(XML、JSON)中的内容为目标的标准符号?