未知昵称 2019-06-13 13:30 采纳率: 66.7%
浏览 629
已采纳

java 用dom的方式解析xml文件,子节点下有相同名字的子节点?

如下图所示第一级含有1,2,3,4 等多个节点,
1下面含有1.1,1.2,1.3,1.4,1.5 等多个节点,
1.2下面含有1.2.1,1.2.2 等多个节点,
解析代码如下:
标注的此处有问题的,testSublist的长度,包括了1.1到1.5和1.2.1到1.2.2,也就是也就是统计出了1下面所有出现了IMPLEMENTATION-DATA-TYPE-ELEMENT,现在我只希望,获得的长度为5,也就是1.1到1.5,也就是一级一级获取下去??

NodeList testList = doc.getElementsByTagName("IMPLEMENTATION-DATA-TYPE");
for(int i = 0; i < impList.getLength(); i++) {
            Element testElement = (Element) testList.item(i);   
            NodeList testSublist=testElement.getElementsByTagName("IMPLEMENTATION-DATA-TYPE-ELEMENT"); //此处有问题
for (int ii = 0; ii < testSublist.getLength(); ii++) {
}
}

图片说明

  • 写回答

3条回答 默认 最新

  • Next66 2019-06-13 14:44
    关注

    兄弟,还在纠结这个问题呀;
    自己实现个getChildrenByTagName,再结合我上次给你的代码
    看下面代码:

        public static List<Node> getChildrenByTagName(Node nl, String name) {
            List<Node> nodeList = new ArrayList<Node>();
            for (Node child = nl.getFirstChild(); child != null; child = child.getNextSibling()) {
                if(child.getNodeType() == Node.ELEMENT_NODE && 
                    name.equals(child.getNodeName())){
                    nodeList.add(child);
                }
            }
            return nodeList;
        }
    
            public static void main(String[] args) {
    
            DocumentBuilderFactory docbf = DocumentBuilderFactory.newInstance();
            try {
                DocumentBuilder docb = docbf.newDocumentBuilder();
                Document doc = docb.parse("test.xml");
                List<Node> elements = getChildrenByTagName(doc, "IMPLEMENTATION-DATA-TYPE");
                System.out.println(elements);
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载