Dom4j解析语音数据XML文档(注意ArrayList多次添加对象,会导致覆盖之前的对象)

今天做的一个用dom4j解析声音文本的xml文档时,我用ArrayList来存储每一个Item的信息,要注意ArrayList多次添加对象,会导致覆盖之前的对象;解决方案是在最后将对象添加入ArrayLis时先new 一个对象,然后将之前那个对象的属性set到新的对象中,之后在加入到 ArrayList,就不会出错了。

package parseXML;

import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;

import java.io.File;import java.util.ArrayList;import java.util.Iterator;import java.util.List;

/** * Created by jet on 2017/7/18. */public class ParseXML {

public static void main(String[] args) throws Exception {        ParseXML test = new ParseXML();       File fileDir = new File("file");        File[] xmlFiles = fileDir.listFiles();

//        String file1 = "10101023391493683209.wav.xml";//        ArrayList<Pojo> list= test.test(file1);        ArrayList<ArrayList<Pojo>> arrayLists= new ArrayList<ArrayList<Pojo>>(20);        for (int i=0;i<xmlFiles.length;i++){//            System.out.println(xmlFiles[i].getName());            if(xmlFiles[i].getName().endsWith(".xml")&&!xmlFiles[i].getName().equals("a.xml")&&!xmlFiles[i].getName().equals("practice.xml"))            arrayLists.add(test.test(xmlFiles[i].getName()));        }        System.out.println(arrayLists);      for (ArrayList<Pojo> pojo:arrayLists             ) {//            System.out.intln("what...................");//            System.out.println(pojo.getBegin()+" "+ pojo.getEnd()+" "+pojo.getRole()+" "+ pojo.getText()+" "+pojo.getFileName() );            System.out.println(pojo);        }    }

public ArrayList<Pojo> test(String file1) throws Exception {

// 创建saxReader对象        SAXReader reader = new SAXReader();        // 通过read方法读取一个文件 转换成Document对象        Document document = reader.read(new File("file/"+file1));        //获取根节点元素对象        Element node = document.getRootElement();

ArrayList<Pojo> list = new ArrayList<Pojo>(30);        Pojo pojo= new Pojo();        pojo.setFileName(file1);        //遍历所有的元素节点        listNodes(node,list,pojo);

return list;

}

/**     * 遍历当前节点元素下面的所有(元素的)子节点     *     * @param node     */    public void listNodes(Element node,ArrayList<Pojo> arrayList,Pojo pojo) {

System.out.println("当前节点的名称::" + node.getName());        // 获取当前节点的所有属性节点        List<Attribute> list = node.attributes();        // 遍历属性节点        for (Attribute attr : list) {

System.out.println(attr.getText() + "-----" + attr.getName()                    + "---" + attr.getValue());         if(attr.getName().equals("Begin")){             pojo.setBegin(attr.getValue());

}else if(attr.getName().equals("End")){             pojo.setEnd(attr.getValue());//             pojo.setText(node.getText());

}

if(attr.getText().equals("R1")){                pojo.setRole("R1");            }else if(attr.getText().equals("R0")){                pojo.setRole("R0");            }

}

if (!(node.getTextTrim().equals(""))) {            System.out.println("文本内容::::" + node.getText());            if(node.getName().equals("Text")){                pojo.setText(node.getText());                Pojo pojo1 = new Pojo();                pojo1.setFileName(pojo.getFileName());                pojo1.setRole(pojo.getRole());                pojo1.setBegin(pojo.getBegin());                pojo1.setEnd(pojo.getEnd());                pojo1.setText(pojo.getText().replace(" ", ""));                arrayList.add(pojo1);            }        }

// 当前节点下面子节点迭代器        Iterator<Element> it = node.elementIterator();        // 遍历        while (it.hasNext()) {            // 获取某个子节点对象            Element e = it.next();            // 对子节点进行遍历            listNodes(e,arrayList,pojo);        }    }}
时间: 2024-12-06 16:29:13

Dom4j解析语音数据XML文档(注意ArrayList多次添加对象,会导致覆盖之前的对象)的相关文章

dom4j解析和生成XML文档

解析XML的两种方法 package cnslp.dom4j.com; import java.io.File; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /**  * Created by cnslp on 2017/5/12 0012.  * 解析XML文档的

当xml中存在命名空间,dom4j解析以及写入xml文档时的乱码问题

最近公司项目开发中需要通过前台用户界面进行客户业务系统的部署(提供界面化操作,减少运维工作的难度),通过修改web.xml进行设置各个项目不同的信息配置. 开发过程中遇到2种问题,同时将解决方案备注上,以方便日后查看. 问题一:当xml中存在命名空间,三种处理办法(dom4j) 问题二:文件保存之后总是提示中文乱码问题 针对上面2个问题的解决方案进行汇总,解决方法主要还是来自于其他网络同行的博客. 第一个 问题主要参照 博客http://blog.sina.com.cn/s/blog_5cef6

6-3 如何解析简单的XML文档

元素节点.元素树 >>> from xml.etree.ElementTree import parse >>> help(parse) Help on function parse in module xml.etree.ElementTree: parse(source, parser=None) help(parse) >>> f = open(r'C:\视频\python高效实践技巧笔记\6数据编码与处理相关话题\linker_log.xml'

源生API解析XML文档与dom4j解析XML文档

一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可以存储数据. 1.XML语言书写的注意事项 1.XML标签命名自定义[推荐英文],标签名中不能包含空格 2.XML空格和换行都表示数据,严格区分大小写 3.XML中特殊字符表示的数据需要使用特殊字符编码和HTML一样 4.CDATA区中的数据不会被识别为语法 <![CDATA[王天霸<>&l

dom4j 解析 XML文档截录

dom4j 是一种解析 XML 文档的开放源代码 XML 框架.本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档. dom4j API 包含一个解析 XML 文档的工具.本文中将使用这个解析器创建一个示例 XML 文档.清单 1 显示了这个示例 XML 文档,catalog.xml. 清单 1. 示例 XML 文档(catalog.xml) <?xml version="1.0" encoding="UTF-8"?> <cat

[Xcode10 实际操作]七、文件与数据-(16)解析XML文档

本文将演示如何解析XML文档. 项目中已添加一份XML文档:worker.xml 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <workers> 3 <worker id='1'> 4 <name>Jerry</name> 5 <age>35</age> 6 <salary>25600</salary> 7 <

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用

艺多不压身 -- 四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX: JDOM: DOM4J: 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然

四种生成和解析XML文档的方法介绍

解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 1.DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合. 这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可