今天做的一个用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);
}
}
}

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

  1. 使用dom解析器对xml文档内容进行增删查改

    直接添代码: XML文档名称(one.xml) <?xml version="1.0" encoding="UTF-8" standalone=" ...

  2. SAX解析和生成XML文档

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...

  3. 解析txt文本,dom4j工具输出为xml文档

    有如下一个ttl.txt文本文档,每一行用空格隔开的三段分别代表主谓宾, 要将它们输出为xml格式文档 工具:dom4j,jar包导入MyEclipse的Java Project工程 代码如下: pa ...

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

    元素节点.元素树 >>> from xml.etree.ElementTree import parse >>> help(parse) Help on funct ...

  5. Java DOM解析器 - 修改XML文档

    这是我们需要修改的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8&q ...

  6. Java DOM解析器 - 查询XML文档

    这是需要我们查询的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0"?> ...

  7. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

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

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

  9. java: (正则表达式,XML文档,DOM和DOM4J解析方法)

    常见的XML解析技术: 1.DOM(基于XML树结构,比较耗资源,适用于多次访问XML): 2.SAX(基于事件,消耗资源小,适用于数量较大的XML): 3.JDOM(比DOM更快,JDOM仅使用具体 ...

随机推荐

  1. Can’t delete list item in Sharepoint2013

         Today,I have meet a very strange error.When I attempt to delete a item from a list,I recieve an ...

  2. 一个极为简单的requirejs实现

    require和 sea的源码分析,我之前的博客有写过, 今天我想分享的是一个很简单的核心代码(不带注释和空行大概60行), 没有容错判断. require.js require函数实现用一句话概括: ...

  3. android中的文件(图片)上传

    android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...

  4. iOS-合成图片(长图)

    合成图片 直接合成图片还是比较简单的,现在的难点是要把,通过文本输入的一些基本数据也合成到一张图片中,如果有多长图片就合成长图. 现在的实现方法是,把所有的文本消息格式化,然后绘制到一个UILable ...

  5. 【个人笔记】关于C++小数的处理

    无论是C-Style还是C++-Style的输出,小数都会四舍五入.如果想要截断两种比较好的方法.第一种:利用sscanf输出成字符串,再人为地putchar().第二种:已知钦定保留6位小数,那么可 ...

  6. restAssured + TestNG测试接口,以下是一个get 请求。

    package Elaine.Test.G.APITest; import org.testng.Assert;import org.testng.annotations.BeforeTest;imp ...

  7. Jmeter中传递cookie值

    场景:用户登陆后会本地会保存cookie,cookie是用来跟服务端验证此用户已经登陆过的重要信息,但是如何获取并在其他请求时将此cookie传递给服务器呢? 在线程组下面之直接添加HTTP Cook ...

  8. Python时间获取及转换知识汇总

    时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个datetime的时间 ...

  9. 【iOS开发】iOS对UIViewController生命周期和属性方法的解析

    iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...

  10. Sql Express数据备份和还原

    参考文章:在SQL Server Express版本中没有代理功能如何自动备份数据库 首先用以下脚本,生成可以自动备份数据库的存储过程: USE [master] GO SET ANSI_NULLS ...