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仅使用具体 ...
随机推荐
- 带你认识Xmanager
XManager是一款小巧.便捷的浏览远端X窗口系统的工具.在工作中经常使用Xmanager来登录远端的Solaris系统,在X窗口系统上作图形化的操作.但是,Xmanager默认并不提供对于中文的支 ...
- Python:正则表达式—— re 模块
一.什么是正则表达式(Regular Expression) 正则表达式本身是一种小型的.高度专业化的编程语言,它内嵌在Python中,并通过 re(regular expression)模块实现.使 ...
- springmvc基础篇—处理图片静态资源文件
当我们在web.xml中对DispatcherServlet的过滤设置为/ 的时候,表示对所有的路径进行拦截过滤,那么不可避免的就会产生一个问题,那就是像图片这种静态资源文件我明明引用路径有,但就是加 ...
- mybatis if标签比较字符串
项目中需要在mybatis后台比较字符串 因为mybatis映射文件使用的是ognl表达式,所以不能使用 <if test="type == '0'"> 解决: < ...
- 牛客网暑期ACM多校训练营(第七场):J-Sudoku Subrectangles
链接:J-Sudoku Subrectangles 题意:给出 n * m 的字母矩阵,公52种字母.求出不含重复元素的子矩阵的个数. 题解: L[i][j]:s[i][j] ~ s[i][ j - ...
- java设计模式之门面模式以及在java中作用
门面模式在Tomcat中有多处使用,在Request和Response对象封装,从ApplicationContext到ServletContext封装中都用到了这种设计模式. 一个系统可以有几个门面 ...
- KMP板子+Trie板子
KMP算法是一个字符串匹配算法,最直白的用法就是在一个长度为n的字符串T中查找另一个长度为m字符串P的匹配(总之就是用于文本中进行单个字符串的匹配). 对于这个问题,暴力算法是很好做的,直接对于T的每 ...
- A1
It’s surprising what you can find at the end of your garden. Wild flowers... and even smaller yet, i ...
- ExtJS新手学习中常见问题
1.常常出现运行之后不出现应该出现的效果. 这种情况一般是引用ExtJS路径不正确,要确保路径正确. 示例: <!DOCTYPE html> <html lang="en& ...
- PAT 1065 单身狗
https://pintia.cn/problem-sets/994805260223102976/problems/994805266942377984 “单身狗”是中文对于单身人士的一种爱称.本题 ...