在 ELEMENT_NODE 的情况下,node.getNodeType 无法按预期工作

Posted

技术标签:

【中文标题】在 ELEMENT_NODE 的情况下,node.getNodeType 无法按预期工作【英文标题】:node.getNodeType is not working as expected in case of ELEMENT_NODE 【发布时间】:2019-07-16 13:55:58 【问题描述】:

我正在尝试仅获取所有元素类型节点,然后我有一些特定的操作要做,但在 ELEMENT_NODE 的情况下 node.getNodeType 无法按预期工作 - 它正在进入所有子节点的 if 块

示例 xml -

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.05">
    <CstmrPmtStsRpt>
        <GrpHdr>
            <MsgId>00990119071512383635</MsgId>
            <CreDtTm>2019-07-15T12:38:36.304+05:30</CreDtTm>
            <InitgPty>
                <Nm>appSend</Nm>
            </InitgPty>
        </GrpHdr>
....    

这是我的代码 - 我想做的是对像 MsgId 这样的元素我想做一些事情,而对于 GrpHdr 我想做一些不同的操作

  try 
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setIgnoringComments(true);
                dbf.setValidating(true);
                dbf.setNamespaceAware(true);
                dbf.setIgnoringElementContentWhitespace(true);

                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(new File(fileName));
                doc.getDocumentElement().normalize();

                NodeList nodeList = doc.getElementsByTagName("*");
                for (int i = 0; i < nodeList.getLength(); i++) 
                    Node node = nodeList.item(i);
                    node.normalize();

                    if( node.getNodeType() == Node.ELEMENT_NODE )
                        // do operation for only elements
                    else
                        // do other operation for non elements 
                    


                

            catch (Exception e)

            

有没有人遇到过类似的问题

提前谢谢你

【问题讨论】:

【参考方案1】:

好吧,以下不是一个好的解决方法 - 但这是我修复它的方法

元素 - 总是只有一个孩子。

所以我用下面的代码对其进行了调整 -

  if( node.getChildNodes().getLength() != 1 )
                        // do operation for only non - elements
                    else
                        // do other operation for elements 
                    

我会说这只是一种变通方法,不是一个好的解决方案

【讨论】:

以上是关于在 ELEMENT_NODE 的情况下,node.getNodeType 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Vue双向绑定的实现原理系列:补充指令解析器compile

10.DOM

10.DOM节点

Node总结

js—— DOM中的node类型

DOM9大节点