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);
}
}
}
Dom4j解析语音数据XML文档(注意ArrayList多次添加对象,会导致覆盖之前的对象)的更多相关文章
- 使用dom解析器对xml文档内容进行增删查改
直接添代码: XML文档名称(one.xml) <?xml version="1.0" encoding="UTF-8" standalone=" ...
- SAX解析和生成XML文档
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...
- 解析txt文本,dom4j工具输出为xml文档
有如下一个ttl.txt文本文档,每一行用空格隔开的三段分别代表主谓宾, 要将它们输出为xml格式文档 工具:dom4j,jar包导入MyEclipse的Java Project工程 代码如下: pa ...
- 6-3 如何解析简单的XML文档
元素节点.元素树 >>> from xml.etree.ElementTree import parse >>> help(parse) Help on funct ...
- Java DOM解析器 - 修改XML文档
这是我们需要修改的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8&q ...
- 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"?> ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
- java: (正则表达式,XML文档,DOM和DOM4J解析方法)
常见的XML解析技术: 1.DOM(基于XML树结构,比较耗资源,适用于多次访问XML): 2.SAX(基于事件,消耗资源小,适用于数量较大的XML): 3.JDOM(比DOM更快,JDOM仅使用具体 ...
随机推荐
- CSS3单选动画
本示例实现了两种单选按钮动画效果,一种是缩放,一种是旋转,以下是html布局以及css样式 html:这里使用了label标签的for属性,以此来绑定radio <div class=" ...
- LeetCode:16. 3Sum Closest(Medium)
1. 原题链接 https://leetcode.com/problems/3sum-closest/description/ 2. 题目要求 数组S = nums[n]包含n个整数,找出S中三个整数 ...
- Hadoop Sentry 学习
什么是Sentry? Sentry 是Cloudera 公司发布的一个Hadoop开源组件,它提供细粒度基于角色的安全控制 Sentry下的数据访问和授权 通过引进Sentry,Hadoop目前可在以 ...
- 给apk签名
一.签名 把apk和签名文件放在jdk bin目录下,然后在jkd bin目录下执行以下代码: jarsigner -verbose -keystore xxx.keystore -signedjar ...
- ProxySQL初体验
Preface As we all know,it's a common sense that separate reading and writing operations can ...
- 「日常训练」Greedy Arkady (CFR476D2C)
不用问为啥完全一致,那个CSDN的也是我的,我搬过来了而已. 题意(Codeforces 965C) $k$人分$n$个糖果,每个糖果至多属于1个人.A某人是第一个拿糖果的.(这点很重要!!) 他$x ...
- 远程连接云主机MySql数据库
笔者最近在学习MySql数据库,试着远程连接阿里云主机数据库.在连接过程中遇到不少麻烦,这里总结一下过程中遇到的问题. 基本前提 先在本地电脑和远程主机上安装MySql数据库,保证数据库服务启动. 云 ...
- Mysql性能优化一:SQL语句性能优化
这里总结了52条对sql的查询优化,下面详细来看看,希望能帮助到你 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2,应尽量避免在 w ...
- Node.js的require()的工作原理
大多数人都知道Node.js中require()函数做什么的,但是有多少人知道它的工作原理呢?我们每天使用它加载库包和模块,但是它的内部行为原理很神秘. 我们追寻Node模块系统的核心: module ...
- Tensorflow Serving介绍及部署安装
TensorFlow Serving 是一个用于机器学习模型 serving 的高性能开源库.它可以将训练好的机器学习模型部署到线上,使用 gRPC 作为接口接受外部调用.更加让人眼前一亮的是,它支持 ...