zoukankan      html  css  js  c++  java
  • 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);
    }
    }
    }
    三年程序员,专注语音文本分析、大数据挖掘、预训练模型及知识图谱相关技术的探索
  • 相关阅读:
    Java命令行启动jar包更改默认端口以及配置文件的几种方式
    Windows下带配置文件的mysql命令行安装方法
    Windows下mysql主从搭建
    Windows下mysql集群搭建
    CAP原则(CAP定理)、BASE理论(精简)
    进程间通讯的7种方式
    Go Web 编程之 数据库
    Go 每日一库之 fsnotify
    Go 每日一库之 viper
    Go 每日一库之 go-ini
  • 原文地址:https://www.cnblogs.com/jetHu/p/7208590.html
Copyright © 2011-2022 走看看