我知道以前曾经问过这个问题,但我有点迷失在这里。
我有一个元素,我可以从中记录typeof:
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
的输出,但这似乎是空的。
答案 0 :(得分:2)
对我来说似乎很奇怪的第一件事是: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
»这样的属性是空的«。
<强>更新强>
正如在@Nick Rupley的回答中指出的那样,你可能正在处理一个E4X实例,并且在过时内容存档中记录here,它已经过时了firefox并且caniuse.com上根本没有出现。因此,如果您的代码在浏览器中运行,则需要将其更改为上述变体之一。否则,您可以在mdn。
上找到有关第一个链接资源上的用法的文档答案 1 :(得分:0)
你有一个E4X XML(或XMLList)对象。所以这样做:
msg['PID']['PID.13'].children().length()
答案 2 :(得分:0)
所以,msg['PID']['PID.13']
是xml。你可以在这里发布文字吗?
如果那个xml类似于<children><length><value>5</value></length></children>
那么,也许,msg['PID']['PID.13'].children
可能被js解释为好像它是msg['PID']['PID.13']['children']
,它是相同的js表达式。同样,依赖于什么类型的对象,它可以返回所有无效节点的空xml节点,即:
typeof msg['PID']['PID.13'].children.a.b.c.d.length
也会返回xml。