ChildNodes/NodeValue 混淆
Posted
技术标签:
【中文标题】ChildNodes/NodeValue 混淆【英文标题】:ChildNodes/NodeValue Confusion 【发布时间】:2011-10-01 23:45:36 【问题描述】:我是 Ajax 的新手。
我正在尝试解析this document。
我已经了解了 readystatechange,它正在获取 XML。但是当涉及到 childNode 及其值时,我会感到困惑。
这里有一些代码。如果我尝试提醒第一个值,它会出现空白。
var clientList = request.responseXML.getElementsByTagName('client');
for (var i=0;i<clientList.length;i++)
var client=clientList[i];
var clientName = client.childNodes[0].nodeValue;
alert(clientName)
据我了解,基于 XML 文档,每个“客户端”标签都会有以下子节点:
[0] : clientName,
[1] : clientStreetAddress,
[2] : clientCity
[n] : ...and so on...
那么我在这里错过了什么?显然,我没有直截了当的事实。请帮忙!
【问题讨论】:
【参考方案1】:您应该使用标签的名称从 XML 中读取数据,而不是根据它们碰巧的顺序。解析文档时,它可能包含元素之间空白的文本节点,这将抵消包含您想要的数据的元素的索引。
var clientName = client.childNodes.selectSingleNode('./clientName').nodeValue;
【讨论】:
或者,使用 XPath 或 jQuery 之类的东西来解析 XML 文档。 啊。好的。我认为 [0] 是因为它将节点及其内容作为数组返回。我会试试看! 好吧,我不明白为什么,但它不起作用。它现在甚至不返回空白警报,这意味着其中的某些东西正在引发某种错误。 TypeError: Object #selectSingleNode
。我更新了答案中的代码。【参考方案2】:
感谢 TeslaNick 建议我改用 XPATH。答案如下:
var clientDoc = request.responseXML;
var clientName = clientDoc.evaluate("data/client[1]/clientName", clientDoc, null, XPathResult.STRING_TYPE, null).stringValue
当然,我认为这必须修改以处理 IE 浏览器,并且必须将路径设置为循环通过客户端。但是,实际,最简单的答案在上面。
也感谢 Guffa 的帮助!
【讨论】:
以上是关于ChildNodes/NodeValue 混淆的主要内容,如果未能解决你的问题,请参考以下文章
Android 安装包优化开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )