xml的解析与创建——bing到youdao导入文件的转换
首先是为了解决一个问题:如何将必应单词本中记录的单词转入到有道词典中去。实际上,必应词典可以导出xml文件,但是该文件有道词典无法解析。这里涉及到xml的解析和创建了。
代码如下:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; public class bing2youdao {
private String bingPath;//input filepath
private String time;// filtering time (Default:current time)
private String tag=null;
final static String youdao="youdao.xml";//output file public bing2youdao(String filename){
bingPath=filename;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
time=sdf.format(new Date());
}
public bing2youdao(String filename,String d){
bingPath=filename;
time=d;
}
public bing2youdao(String filename,String d,String t){
this(filename,d);
tag=t;
} public void run(){
Node word=null;
Node detail=null;
String danci=null;
String pronunciation=null;
String definition=null;
String data=null;
try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element wordbook = document.createElement("wordbook"); //创建根节点
document.appendChild(wordbook); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dm = db.parse(new File(bingPath));//获得根元素
Element bingWord = dm.getDocumentElement();
NodeList wordList= bingWord.getChildNodes().item(1).getChildNodes();
for (int i = 1; i < wordList.getLength(); i++) {
word = wordList.item(i);
NodeList nodeDetail = word.getChildNodes();
for (int j = 0; j < nodeDetail.getLength(); j++) {
detail = nodeDetail.item(j);
if ("Eng".equals(detail.getNodeName()))
danci=detail.getTextContent();
else if ("Phonetic".equals(detail.getNodeName()))
pronunciation=detail.getTextContent();
else if ("Defi".equals(detail.getNodeName()))
definition=detail.getTextContent();
else if("Date".equals(detail.getNodeName()))
data=detail.getTextContent();
} //If the recorded time is after the filtering time than output it
if(timeDecision(data)&&nodeDetail.getLength()>0){
Element item= document.createElement("item"); Element vacbulary= document.createElement("word");
vacbulary.appendChild(document.createTextNode(danci));
item.appendChild(vacbulary); Element trans = document.createElement("trans");
trans.appendChild(document.createTextNode(definition));
item.appendChild(trans); Element phonetic = document.createElement("phonetic");
phonetic.appendChild(document.createTextNode(pronunciation));
item.appendChild(phonetic);
Element tags = document.createElement("tags");
if(tag!=null)
tags.appendChild(document.createTextNode(tag));
item.appendChild(tags); Element progress = document.createElement("progress");
progress.appendChild(document.createTextNode(1+""));//复习进度,默认为1,可调为-1表示不加入复习计划
item.appendChild(progress); wordbook.appendChild(item);
}
} try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(document);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter pw = new PrintWriter(new FileOutputStream(youdao));
StreamResult result = new StreamResult(pw);
transformer.transform(source, result);
System.out.println("【必应词典】转换为【有道词典】成功!");
}
catch (TransformerConfigurationException e) {
System.out.println(e.getMessage());
}
catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
catch (TransformerException e) {
System.out.println(e.getMessage());
} }
catch (Exception ex) {
System.out.println(ex.getMessage());
}
} //filtering function
private boolean timeDecision(String data){
if(data.compareTo(time)>=0)
return true;
else
return false; }
}
使用说明:
(1)将必应词典导出到本地文件“bing.xml”,放入工程根目录下。
(2)定义 bing2youdao对象,可以使用三种构造函数:
new bing2youdao("bing.xml");
new bing2youdao("bing.xml",“yyyy-mm-dd”);//表示仅仅转换“yyyy-mm-dd”(含)之后天数记录的单词
new bing2youdao("bing.xml",“yyyy-mm-dd”,“newClass”);//表示将转换的单词归为“newClass”类
(3)调用run()生成“youdao.xml”并将其导入到有道词典单词本即可。本例模式的复习进度为1,若希望其不加入复习计划,修改为“-1”即可
如:
public static void main(String args[]) {
bing2youdao jisuan= new bing2youdao("bing.xml","2015-10-21","CC");
jisuan.run();
}
上例仅仅转换2015年10月21日后保存到必应词典中的单词,并将其统一归为“CC”类。
xml的解析与创建——bing到youdao导入文件的转换的更多相关文章
- XML详解二XML的解析与创建
XML用来传输和存储数据,如何解析获取到的XML文本呢? 一.解析XML 创建demo.xml文件: <?xml version="1.0" encoding="U ...
- 解析XML出错,无法创建DOMDocument对象
[问题] 加载XML配置文件时,创建DOMDocument对象总是失败,创建代码如下: MSXML2::IXMLDOMDocumentPtr pXMLDoc; MSXML2::IXMLDOMEleme ...
- XML解析和创建的JAXB方式
1.说明 JAXB是Java Architecture for XML Binding, 即用于XML绑定的Java体系结构, JAXB作为JDK的一部分, 能便捷地将Java对象与XML进行相互转换 ...
- 四种解析和创建方式(DOM,SAX,DOM4J,JDOM)
一.先导入jar包 DOM基于树形,SAX基于事件,DOM4J和JDOM基于底层API 二.代码如下 1 package com.sxt.test; import java.io.File; impo ...
- JAVA 中XML的解析
XML: 可扩展标记语言(extensible Markup Language) 用于标记电子文件使其具有结构性的标记语言.XML可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定 ...
- iOS边练边学--iOS中的XML数据解析
XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser ...
- iOS - XML 数据解析
前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...
- XML的解析方式(DOM、SAX、StAX)
(新) XML的解析方式(DOM.SAX.StAX) 博客分类: XML 一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
随机推荐
- android开发--ormlite
ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具. 官方网站:http://ormlite.com/ 如果需要开发a ...
- 怎么在win7的64位旗舰版上配置coocs2d-x 3.2的android环境并且打包APK
我这用的操作系统是64位win7旗舰版打包成功. 希望有急用的能看到这篇文章,毕竟大家都是从菜鸟到大神的. 也以此证明自己的成长历程. 需要的东西有: 1.JAVA-JDK 2.Python 2.7. ...
- C语言编程技巧-signal(信号)[转]
自 http://www.uml.org.cn/c++/200812083.asp 信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用 ...
- php工作笔记3-php基础加强
1.自动加载 autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading.通常PHP5在使用一个类时 ...
- [MAC]OS X Mavericks 10.9.5 / 10.10.2 VMWare vmdk镜像,解压就能用!
用起来是比VirtualBox好使很多: 1.鼠标很灵敏,不像Vbox那么飘 2.显卡有驱动,VM可以配置显示器尺寸,完美支持网络.语音.视频,直接搞全屏,还能看电影 3.USB设备支持热插拔 4.支 ...
- ConCurrent in Practice小记 (1)
ConCurrent in Practice小记 (1) 杂记,随书自己写的笔记: 综述问题 1.线程允许在同一个进程中的资源,包括共享内存,内存句柄,文件句柄.但是每个进程有自己的程序计数器,栈和局 ...
- iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0
首先请求到的数据都会变成字符串,先将字符串转化为double类型 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: ...
- Slyx_SerAddGet
##通道##119.29.192.206:12002## ##通道##58.221.49.24:12002##
- 循序渐进Python3(十二) --1-- web框架之django
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...
- Tcc学习笔记(三) 使用举例
TCC的使用以使用第三方库为例子,例子包括:OpenGL , GMP以及SDL等. 1.TCC使用GLUT 去OpenGL下载http://www.opengl.org/resources/libra ...