【问题标题】:How to count children of xml element?如何计算 xml 元素的子元素?
【发布时间】:2017-08-23 07:54:32
【问题描述】:

我知道以前有人问过这个问题,但我有点迷路了。

我有一个元素用于记录 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 的输出,但这似乎是空的。

【问题讨论】:

  • 为什么不尝试输出msg['PID']['PID.13'].children.length的值?
  • @damluar - 我刚试过,但返回空。还有其他想法吗?
  • 当您尝试msg['PID']['PID']; 时会显示什么?
  • 你可以试试console.dir(msg['PID']['PID.13'])console.dir(msg['PID']['PID.13'].children) 并检查属性吗?

标签: javascript xml count children


【解决方案1】:

所以,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。

【讨论】:

    【解决方案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
    

    并且来自 cmets 的那些方法也将起作用:

    doc.documentElement.children.length
    

    所以我猜你在那个对象中的xml 对象不是真正的XMLDocument,这就是为什么我猜像msg['PID']['PID.13'].children.length »seam to be empty«这样的属性。

    更新

    正如@Nick Rupley 的回答中所指出的,您可能正在处理 E4X 的实例,并且正如 here 所记录的,在 过时内容的存档中,它在 Firefox 和caniuse.com 上根本没有出现。因此,如果您的代码在浏览器中运行,则需要将其更改为上述变体之一。否则,您可以在 mdn 上找到有关第一个链接资源使用情况的文档。

    【讨论】:

      【解决方案3】:

      您所拥有的是一个 E4X XML(或 XMLList)对象。所以改为这样做:

      msg['PID']['PID.13'].children().length()
      

      【讨论】:

        猜你喜欢
        • 2020-10-06
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        相关资源
        最近更新 更多