XML转换成TXT行数据的Java程序
ZKe
-------------------
XML数据的一个块内的所有属性,转换成TXT文件的一行。众所周知XML文件是通过类似HTML的标签进行数据的定义如图所示
属性由id, article, discuss, insertTime, oigin, person_id, time, transmit,整个数据由RECORD标签括住。
这是一个典型的括号匹配问题,可以定义一个信号量标记数据的开始与结束,另外可以声明一个String类型的变量作为数据缓冲区,遇到</RECORD>标签就将改变量的值写入新文件,遇到<RECORD>便清空改变量。遇到任一属性字段的标签,便写入缓冲变量。
处理方法:
private String oneLine = null;
private boolean canPrint = false; private void process(String line){ if(line.startsWith("<RECORD>")){
oneLine = "";
canPrint = false;
return;
}else if(line.startsWith("<RECORDS>")){
return;
}else if(line.startsWith("</RECORD>")){
canPrint = true;
return;
}else if(line.startsWith("</RECORDS>")){
return;
}
line = line.trim();
if(line.trim().startsWith("<id>")){
oneLine += line.substring(4, line.length()-5);
oneLine += " | ";
}
else if(line.trim().startsWith("<article>")){
if(line.indexOf("</article>")==-1){
oneLine+= line.substring(9);
return;
}
oneLine += line.substring(9, line.length()-10);
oneLine += " | ";
}else if(line.trim().startsWith("<discuss>")){
oneLine += line.substring(9, line.length()-10);
oneLine += " | ";
}else if(line.trim().startsWith("<insertTime>")){
oneLine += line.substring(12, line.length()-13);
oneLine += " | ";
}else if(line.trim().startsWith("<origin>")){
oneLine += line.substring(8, line.length()-9);
oneLine += " | ";
}else if(line.trim().startsWith("<person_id>")){
oneLine += line.substring(11, line.length()-12);
oneLine += " | ";
}else if(line.trim().startsWith("<time>")){
oneLine += line.substring(6, line.length()-7);
oneLine += " | ";
}else if(line.trim().startsWith("<transmit>")){
oneLine += line.substring(10, line.length()-11);
}else if(line.indexOf("</article>")!=-1){
oneLine += line.substring(0, line.length()-10);
}
}
XML数据的读取使用BufferedReader,写入TXT使用BufferedWriter,注意其中信号量的控制
public void printToTXTFile(){
File file =new File(this.path);
File targetFile = new File("/root/myCodes/finalClassDesign/stardardAllData.txt");
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter(targetFile);
BufferedWriter bw = new BufferedWriter(fw); String line = "";
while((line = br.readLine())!= null){ process(line);
if(canPrint){
bw.write(oneLine);
bw.newLine();
// System.out.println(oneLine);
}
} bw.flush();
bw.close();
fw.close();
br.close();
fr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
其他部分就是类里面的其他属性了,比如源文件路径,目标文件路径,函数调用了,省略自己补充
转换后的TXT文件内容如下,效果挺好,我是用"|"作为分割,其实有弊端,因为"|"在正则表达式里面被视作通配符,大家改成逗号","或者分号";"甚至斜杠"|"什么的即可
XML转换成TXT行数据的Java程序的更多相关文章
- java将XML文档转换成json格式数据
功能 将xml文档转换成json格式数据 说明 依赖包:1. jdom-2.0.2.jar : xml解析工具包;2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 ...
- Dom4j把xml转换成Map(非固定格式)
将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...
- 如何在ASP.NET中用C#将XML转换成JSON
本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方式来 ...
- 如何在ASP.NET中用C#将XML转换成JSON 【转】
本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方 ...
- C#将XML转换成JSON转换XML
原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...
- xml转换成map
import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.H ...
- jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)
xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...
- Dom4j把xml转换成Map(固定格式)
/** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...
- Python 将pdf转换成txt(不处理图片)
上一篇文章中已经介绍了简单的python爬网页下载文档,但下载后的文档多为doc或pdf,对于数据处理仍然有很多限制,所以将doc/pdf转换成txt显得尤为重要.查找了很多资料,在linux下要将d ...
随机推荐
- matlab一个figure画多个子图,和多个figure画多个图。
参考:https://blog.csdn.net/xiaotao_1/article/details/79024488 1,一个figure画多个子图: figure(10) % define fig ...
- Visual C++中各种文件的作用(详细)
参考:http://blog.sina.com.cn/s/blog_6975d67c0100r3kx.html DSW:全称是Developer Studio Workspace,最高级别的配置文件, ...
- 利用rtklib处理GPS以及北斗数据详解
利用rtklib开源代码处理GPS以及北斗数据详解 在GNSS领域最基础的工作是这些GNSS系统的定位工作,对于绝大多数研究者,自己着手完成这些工作是一个"鸡肋":完全独立设计的话 ...
- try with resource当中你没有注意到点。。
怎么使用try with resource语法 在 JDK 9 中更简洁使用 try-with-resources 语句 try with resource当中你没有注意到点 try with res ...
- 《流畅的Python》第二部分 数据结构 【序列构成的数组】【字典和集合】【文本和字节序列】
第二部分 数据结构 第2章 序列构成的数组 内置序列类型 序列类型 序列 特点 容器序列 list.tuple.collections.deque - 能存放不同类型的数据:- 存放的是任意类型的对象 ...
- 解读JVM虚拟机
概要点: java虚拟机概述和基本概念 堆.栈.方法区 了解虚拟机参数 垃圾回收概念和算法.及对象的分代转换 垃圾收集器 java虚拟机的原理: 所谓虚拟机,就是一台虚拟的机器.它是一款软件,用来执行 ...
- day57 Pyhton 前端Jquery09
内容回顾: - 筛选选择器 $('li:eq(1)') 查找匹配的元素 $('li:first') $('li:last') - 属性选择器 - 筛选的方法 - find() 查找后代的元素 - ...
- IIS日志文件越来越大导致C盘空间变小处理方法
问题概述 C:\inetpub\logs\LogFiles\W3SVC文件夹越来越大,IIS日志会消耗大量的硬盘空间,有潜在写满整个硬盘空间的风险,为了解决这个问题很多用户会选择关闭日志,但显然IIS ...
- msyql查看连接数
连接数 SHOW FULL PROCESSLIST 1. 查看允许的最大并发连接数 SHOW VARIABLES LIKE 'max_connections'; 2. 修改最大连接数 方法1:临时 ...
- spring boot:使用多个线程池实现实现任务的线程池隔离(spring boot 2.3.2)
一,为什么要使用多个线程池? 使用多个线程池,把相同的任务放到同一个线程池中,可以起到隔离的作用,避免有线程出错时影响到其他线程池,例如只有一个线程池时,有两种任务,下单,处理图片,如果线程池被处理图 ...