2012-04-09 54 views
1

比方说,我有以下XML文档,我需要使用jQuery解析它。使用jQuery解析XML文档,是否有效的方法

<books> 
     <book> 
      <title>Gone with the Wind!</title> 
     </book 
     <book> 
      <title>Lord of the Rings</title> 
     </book> 
     <book> 
      <title>4 hour work week</title> 
     </book 
    </books> 

为了获得第一本书的“标题”。我可以使用下面的jQuery函数。

// let's assume xmldoc contains the above document. 
    $(xmldoc).find("title").first().text(); 

这会给我“标题”的第一本书,即“乱世佳人”!。现在,我的问题在于:这是获得第一本书的“标题”的有效方法吗?

恐怕,内部jQuery可能会解析所有书籍的标题,然后返回第一个()。我想知道,如果我在解析我不感兴趣的书籍时浪费CPU周期?

如果您能想到任何问题,请提出替代方案。提前致谢!

PS:请注意,我无法使用浏览器的原生JavaScript API,因为项目的其余部分已经使用jQuery进行XML解析。

+0

我会假设jQuery会使用浏览器的xml解析api(如果可用)。为什么不检查jQuery源代码? – 2012-04-09 21:04:26

+0

@VincentMcNabb,谢谢。您的评论让我着眼于jQuery源代码。我一直认为,我无法阅读和理解jQuery :)。诚然,如果可用,jQuery确实使用浏览器的本地功能。我已经设置了一个断点和步骤来发现jQuery调用Sizzle.find()。 Sizzle.find()反过来使用浏览器的getElementsByTagName()。所以,它确实获得了整个名称集合并以Array的形式返回。 first()调用只是返回该数组中的第一个元素。 – Karthik 2012-04-09 21:56:33

+0

不用担心:-)顺便说一句,jQuery不是由神奇的神(我曾经对很多事情感觉如此),但是由于它的大小,刚开始时需要很长的时间也是jQuery对象的构造方式。其实我觉得有点混乱。但通常情况下,一旦你认识到它太大的事实,你应该能够搜索你所调用的函数,理解这个函数,然后看看理解那些依次调用的函数。等等。 – 2012-04-10 05:48:56

回答

4

我不能给其效率说话(为什么不基准呢?),但这里是使用只是一个单一的选择,以达到同样效果的替代表现形式:

$("book:first-child title", xmldoc).text() 

由于@VincentMcNabb点jQuery尝试尽可能使用浏览器的内置功能。

+0

谢谢。但是,虽然逐步通过我注意到,jQuery仍创建一组所有匹配的元素并返回第一个元素。所以我认为,效率方面它可能会是一样的。 – Karthik 2012-04-09 21:49:57