Javascript 如何计算xml元素的子元素?
我知道以前有人问过这个问题,但我有点迷路了 我有一个元素,我从中记录类型:Javascript 如何计算xml元素的子元素?,javascript,xml,count,children,Javascript,Xml,Count,Children,我知道以前有人问过这个问题,但我有点迷路了 我有一个元素,我从中记录类型: typeof msg['PID']['PID.13'] // outputs "xml" 下面我记录了childrence.length,我希望它是一个数字: typeof msg['PID']['PID.13'].children.length // also outputs "xml" 但是childrence.length的类型也是xml。这怎么可能 它是一个隐藏在系统(Mirth)中的Javascript
typeof msg['PID']['PID.13'] // outputs "xml"
下面我记录了childrence.length
,我希望它是一个数字:
typeof msg['PID']['PID.13'].children.length // also outputs "xml"
但是childrence.length的类型也是xml
。这怎么可能
它是一个隐藏在系统(Mirth)中的Javascript,在这个系统中,日志记录是一个问题(至少我还没有发现它是如何工作的),所以我很难调试它
有人知道我如何计算元素的子元素数吗?欢迎所有提示
[编辑]
正如我建议的那样,我还尝试了msg['PID']['PID.13'].children.length的输出,但它似乎是空的。我觉得非常奇怪的第一件事是: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'].childrence.length
»seam为空«
更新
正如@Nick Rupley的回答中所指出的,您可能正在处理E4X的一个实例,并且如文档所述,在过时内容的存档中,它在firefox中是过时的,根本不会出现在firefox上。因此,如果您的代码在浏览器中运行,则需要将其更改为上述变体之一。否则,您可以在mdn上找到关于第一个链接资源使用情况的文档。您拥有的是一个E4X XML(或XMLList)对象。因此,请改为:
msg['PID']['PID.13'].children().length()
因此,msg['PID']['PID.13']
是xml。你能把它发到这里吗?
如果该xml类似于5
,那么可能是msg['PID']['PID.13'].。js可能会将children
解释为类似于msg['PID']['PID.13']['children']
,这是相同的js表达式。类似地,根据对象的类型,它可以为所有无效节点返回空xml节点,即:
typeof msg['PID']['PID.13'].children.a.b.c.d.长度
还会返回xml。为什么不尝试输出msg['PID']['PID.13'].children.length
?@damluar的值呢?我刚刚尝试过,但返回的是空的。还有其他想法吗?当你尝试msg['PID']['PID']时它会显示什么
?您可以尝试console.dir(msg['PID']['PID.13'])
或console.dir(msg['PID']['PID.13'].children)
,并检查属性吗?