如何用JavaScript验证和遍历XML.真的没有更好的办法了
How to verify and traverse XML with JavaScript. Really no better way?
我正在做一个简单的jQuery.get
调用api.facebook.com来检索一个URL的喜欢的数量。结果是XML(这本身是出乎意料的,但不是这里的重点)。响应如下所示:
<links_getStats_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true">
<link_stat>
<url>godfisk.no/fiskenasjonen</url>
<normalized_url>http://www.godfisk.no/fiskenasjonen</normalized_url>
<share_count>35</share_count>
<like_count>402</like_count>
<comment_count>10</comment_count>
<total_count>447</total_count>
<click_count>0</click_count>
<comments_fbid>676768902366174</comments_fbid>
<commentsbox_count>0</commentsbox_count>
</link_stat>
</links_getStats_response>
要遍历这棵树并获得<like_count>
元素的文本内容,我要这样做:
data.firstChild.childNodes[1].childNodes[7].textContent;
这让我回到了在E4X之前AS3中处理XML的方式。我不禁觉得这是相当脆弱的,所以我决定在访问返回的数据之前验证它的完整性是一个好主意。这就给我留下了这个圣诞树复合if语句:
if (data
&& data.childNodes.length > 0
&& data.firstChild.childNodes.length > 1
&& data.firstChild.childNodes[1].childNodes.length > 7
&& data.firstChild.childNodes[1].childNodes[7].textContent) {
// OK, we're good, go ahead..
}
真的吗? ?
您需要做的是使用XPath,例如在您的示例中获取like_count元素:
var elem = data.selectSingleNode('/links_getStats_response/link_stat/like_count'); // assign the element
var value = elem.nodeValue; // to get the element value
有关XPath的更多信息,请参阅以下链接
有点厚颜无耻,但确实是更好的选择,因为我已经在使用jQuery:
var numLikes = $('like_count', data).text();
或者不惜一切代价避免使用jQuery:
var numLikes = xml.querySelector('like_count').textContent;
相关文章:
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 设置嵌套对象属性的更好方法
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 什么更好?使用iframe或jQuery之类的东西在外部网站中加载HTML文件
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 有什么比document.execCommand更好的东西吗
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 如何用JavaScript验证和遍历XML.真的没有更好的办法了