javascript - 模拟 jQuery $.post/$.ajax 读取 XML

标签 javascript jquery xml parsing

可能是个奇怪的问题;我正在尝试将 XML 加载到 jQuery 中以遍历它。

使用 $.post 我可以完美地做到这一点,并将 XML 指定为数据类型。我的问题围绕着如何让 jQuery 使用该数据类型来理解相同的数据(如果它已经在页面中),即我将它放在一个变量中。

每当我在变量中使用完全相同的 XML 数据时,它就无法正确地遍历它。

我试过删除声明并删除问号、转义引号等。

我试过像这样加载:-

var xml = new XML('<blah><moo>134</moo></blah>');

当然

var xml = $('<blah><moo>134</moo></blah>');

var xml = '<blah><moo>134</moo></blah>';

var xml = "<blah><moo>134</moo></blah>";

等我做错了什么?

最佳答案

问题是 jQuery 不解析 XML,除非在执行 Ajax 请求时使用 XMLHttpRequest 的内置浏览器 responseXML 属性。如果您将 XML 字符串传递给 $(),它会简单地假定它是 HTML,将其指定为 HTML 元素的 innerHTML 并读取该 HTML 元素的子元素。这不是 XML 解析。

要解析 XML,您可以使用如下函数:

var parseXml;

if (window.DOMParser) {
    parseXml = function(xmlStr) {
        return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
    };
} else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) {
    parseXml = function(xmlStr) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    };
} else {
    parseXml = function() { return null; }
}

var xml = parseXml("<blah><moo>134</moo></blah>");
if (xml) {
    window.alert(xml.documentElement.nodeName);
}

更新

jQuery 1.5 的新 parseXML()方法正是这样做的,而且似乎运作良好。

var xml = $.parseXML("<blah><moo>134</moo></blah>");

这会为您提供一个 XML 文档,然后您可以使用 jQuery 以通常的方式遍历该文档:

var $xml = $(xml);
alert($xml.find("moo:first")[0].nodeName);

关于javascript - 模拟 jQuery $.post/$.ajax 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808566/

相关文章:

javascript - 谷歌地图多色折线

javascript - 当水 visibility 关闭时,谷歌会在景观上绘制奇怪的多边形

javascript - 如何从图像标签获取宽度和高度属性?

xml - 在 Swift 4 中解析 XML

Android XML 解析失败意外 token

javascript - 从 dateTime 字符串转换为 javascript 日期对象

javascript - 将 CoffeeScript 问号语法翻译成 Javascript

javascript - 将 selectize.js 添加到patternlab.io 实现中

javascript - jQuery 如果选中复选框执行此操作

xml - XSLT 输出到 HTML