我知道以前有人问过这个,但我在这里有点迷路了。
我从一个元素中记录了类型:
typeof msg['PID']['PID.13'] // outputs "xml"
因此,在this answer之后,我记录了
children.length
,我希望它是一个数字:typeof msg['PID']['PID.13'].children.length // also outputs "xml"
但是
children.length
的类型也是xml
。怎么会这样?它是隐藏在系统(mirth)中的javascript,在这个系统中,日志记录是一个问题(至少我还没有发现它是如何工作的),所以我很难调试它。
有人知道我怎样才能让孩子们知道元素的数量吗?欢迎所有小费!
[编辑]
如前所述,我也尝试了
msg['PID']['PID.13'].children.length
的输出,但这似乎是空的。 最佳答案
我觉得很奇怪的第一件事是:typeof msg['PID']['PID.13'] // 'xml'
。因此,如果您从服务器获得了一些XML,您可以这样解析它:
var parser = new DOMParser(),
doc = parser.parser.parseFromString(xml, 'text/xml'); //xml is a xml string
typeof doc // 'object'
要计算某些元素/子元素的出现次数,可以使用xpath:
var count = doc.evaluate('count(//someelement)', doc.documentElement, null, XPathResult.NUMBER_TYPE, null).numberValue;
你甚至可以跑:
doc.querySelectorAll('someelement').length
评论中的这些方法也将起作用:
doc.documentElement.children.length
所以我猜那个对象中的
xml
对象不是一个真正的XMLDocument
,这就是为什么我猜像msg['PID']['PID.13'].children.length
;seam这样的属性是空的~。更新
正如@nick rupley的回答中所指出的,您可能正在处理e4x的一个实例,正如here文档中所述,在过时内容的存档中,它在firefox中是过时的,根本不会出现在caniuse.com上。因此,如果代码是在浏览器中运行的,则需要将其更改为上述变体之一。否则,您可以在mdn上找到有关第一个链接资源使用情况的文档。