Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算xml元素的子元素?_Javascript_Xml_Count_Children - Fatal编程技术网

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)
,并检查属性吗?