2011-03-14 51 views
3

我打电话通过ajax网页。它的部分响应是一小块XML。为什么JQuery无法解析某些xml节点?

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

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

它发现文字很好,但从来没有找到图像节点。

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

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

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

该代码工作,但是当我用这个...

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

它从来没有发现任何东西。

+2

一小块XML?这是被视为XML还是你的意思是响应是一个HTML文档,其中包含一些无效标签? – Quentin 2011-03-14 20:59:09

+0

AJAX响应由多个分隔项组成......最后一项是一小块XML。 – gshauger 2011-03-14 21:01:32

+0

在尝试通过它运行选择器引擎之前,您对XML小块做什么? – Quentin 2011-03-14 21:03:19

回答

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。这样,您也不需要知道哪些标签会被修改,这意味着更少的特殊情况需要处理。

+0

+1,很好找。我不知道jQuery 1.5有这个功能。 – mattsven 2011-03-14 21:22:06

+0

@ motionman95我刚发现它:) – 2011-03-14 21:23:51

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。你永远不知道会出现什么怪癖。

+0

有没有一种方法可以输出XML的形式,jquery将其转换为?为了我自己的调试目的?换句话说,你是如何获得这个字符串的?另外为什么它将它转换为开始?谢谢! – gshauger 2011-03-14 21:04:55

+0

像这样:alert(data.html()); 或alert(data [0] .innerHTML); – mattsven 2011-03-14 21:06:32