首先是为了解决一个问题:如何将必应单词本中记录的单词转入到有道词典中去。实际上,必应词典可以导出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导入文件的转换的更多相关文章

  1. XML详解二XML的解析与创建

    XML用来传输和存储数据,如何解析获取到的XML文本呢? 一.解析XML 创建demo.xml文件: <?xml version="1.0" encoding="U ...

  2. 解析XML出错,无法创建DOMDocument对象

    [问题] 加载XML配置文件时,创建DOMDocument对象总是失败,创建代码如下: MSXML2::IXMLDOMDocumentPtr pXMLDoc; MSXML2::IXMLDOMEleme ...

  3. XML解析和创建的JAXB方式

    1.说明 JAXB是Java Architecture for XML Binding, 即用于XML绑定的Java体系结构, JAXB作为JDK的一部分, 能便捷地将Java对象与XML进行相互转换 ...

  4. 四种解析和创建方式(DOM,SAX,DOM4J,JDOM)

    一.先导入jar包 DOM基于树形,SAX基于事件,DOM4J和JDOM基于底层API 二.代码如下 1 package com.sxt.test; import java.io.File; impo ...

  5. JAVA 中XML的解析

    XML:  可扩展标记语言(extensible Markup Language) 用于标记电子文件使其具有结构性的标记语言.XML可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定 ...

  6. iOS边练边学--iOS中的XML数据解析

    XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser ...

  7. iOS - XML 数据解析

    前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...

  8. XML的解析方式(DOM、SAX、StAX)

    (新)  XML的解析方式(DOM.SAX.StAX) 博客分类: XML   一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...

  9. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

随机推荐

  1. .NET (二)委托第二讲:内置委托Func

    在上一章节中,我们自己声明了一个委托: public delegate bool Cal(int num); 接受int参数,返回bool类型,目的是过滤集合中的 奇数 或者 偶数. .NET 为我们 ...

  2. ATL开发 ActiveX控件的 inf文件模板

    ATL开发 ActiveX控件的 inf文件模板    

  3. webpack配置备份

    package.json: { "name": "webpackTest", "version": "1.0.0", & ...

  4. Java中的自增问题(i=i++)

    也许我这是在较真, 但是我们确实有时候就不小心就错写为这种情况了. 看如下代码: public class Test{ public static void main(String[] args){ ...

  5. 【转】Web前端研发工程师编程能力飞升之路

    分类: Javascript | 出自 海玉的博客 今天看到这篇文章.写的非常有意思.发现自己还有很长的一段路要走. [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如 ...

  6. kendo ui 富文本编辑控件 Editor 实现本地上传图片,并显示

    富文本编辑的组件有很多,大名鼎鼎的KENDO UI中自然也有,但是默认功能中,只能包含网络图片, 而如果要实现本地上传图片,KENDO UI也提供了相应的功能,但必须实现KENDO规定的多个接口, 而 ...

  7. 如何在cluster上跑R脚本

    R 是一个比较不错但是有时候操蛋的语言,不错是因为用着爽的时候真的很爽,操蛋是因为这种爽不是什么时候都可以的,比如说在cluster上批处理跑R脚本. 当然说这话有些在上面跑过的各种不服气,你丫傻逼吧 ...

  8. robot framework 安装配置

    robot framework 是一款专门用作自动化测试的框架,提供了丰富的内置库,与第三方库,也支持用户自己编写的库,robot framework +library 可以 用来做ui的自动化测试, ...

  9. liToSpan

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  10. nullcon HackIM 2016 -- Crypto Question 5

    Now you are one step away from knowing who is that WARRIOR. The Fighter who will decide the fate of ...