为什么JQuery无法解析某些xml节点?

时间:2011-03-14 20:52:03

标签: jquery xml

我正在通过ajax调用网页。它的一部分响应是一小段XML。

我尝试解析它,但jQuery似乎只找到一些节点。例如:

<aaa>
   <text>bbb</text>
   <image>test</image>
</aaa>

它发现文本很好但从未找到图像节点。

但如果我将拼写从“image”更改为“zimage”,它就会找到它。在通过jQuery解析XML时是否保留“image”这个词?

我的jQuery代码非常简单......

$(data).find("zimage").each(function() {
    alert("node found");
});

该代码有效,但是当我使用它时......

$(data).find("image").each(function() {
    alert("node found");
});

它永远找不到任何东西。

3 个答案:

答案 0 :(得分:3)

您使用的是哪个版本的jQuery?似乎jQuery 1.5具有parseXML()函数:

var data="<aaa><text>bbb</text><image>test</image></aaa>";
var xmlDoc = jQuery.parseXML(data);
var $xmlDoc = jQuery(xmlDoc);

$xmlDoc.find("image").each(function() {
   alert("node found"); //this alert pops up because find() returns [image]
});

如果您可以控制正在使用的jQuery版本,可以尝试将其替换为版本1.5,这样您就可以访问parseXML()函数。它就像这个函数不对XML进行任何后处理,因此你得到一个与XML匹配的DOM。这样,您也不需要知道要修改哪些标记,这意味着要处理的特殊情况就更少了。

答案 1 :(得分:1)

因为javascript正在将您的“数据”转换为:

<aaa><text>bbb</text><img>test</aaa>

因此,这有效:

var xml = "<aaa><text>bbb</text><image>test</image></aaa>";
var data = $("<div />", { html: xml });

data.find("img").each(function() {
    alert("node found");
});

在几乎所有需要解析XML的情况下,最好使用XML库。你永远不知道会弹出什么样的怪癖。

答案 2 :(得分:1)

您需要将xml转换为jQuery要遍历的DOM。 jQuery不能直接在xml上工作,但通过浏览器提供的DOM选择可以很好地工作。

这是一个为XML字符串返回DOM的插件: http://outwestmedia.com/jquery-plugins/xmldom/