首先是为了解决一个问题:如何将必应单词本中记录的单词转入到有道词典中去。实际上,必应词典可以导出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. python中x,y交换值的问题

    今天碰到了python和其他语言不同的问题:赋值语句 x,y,z=1,2,3,执行 z,x,y=y,z,x 后,x.y.z 中分别含有什么值? 我想的是 x=2  y=2  z=2 可调试后应该是:x ...

  2. 第六百一十一天 how can I 坚持

    离开泛华了,在那感觉确实挺压抑的,什么环境才适合我呢.哎. 明天回济南,弟弟交房了,去看看房子,和郭娜跨个年,好好谈吧,尽快结婚了. 睡觉.

  3. CVPR 2007 Learning to detect a salient object

    Dataset: MSRA A&B are introduced in this paper. A conditional Random Field based method was prop ...

  4. C语言 教学实践建议

    这是2016年秋季学期和北京工业大学耿丹学院合作教学的计划. 2016级有四个班,每班大约 32 人,每班配有一个有一定实际工作经验的助教,配合老师把课教好. C语言是一门基础课, 是耿丹学院新生的第 ...

  5. mysql5.7忘记密码

    注意:mysql5.7 user表密码字段由password改为authentication_string 1.service mysql stop 2.mysqld_safe --skip-gran ...

  6. AIDL和生成的java文件要分开存放,否则生成can't find symbol class

    Android 5.0之后需要AIDL和生成的java文件要分开存放,否则生成can't fin symbol class.但是4.3没有这个限制.被这个弄了一天,跟老大讨论了一下才豁然开朗.

  7. lisp中的nil

    ANSI Common Lisp 第二章 课后习题 7.只使用本章所介绍的操作符,定义一个函数,它接受一个列表作为实参,如果有一个元素是列表时,就返回真. (defun have-list (lst) ...

  8. node npm 安装模块 淘宝镜像

    npm --registry https://registry.npm.taobao.org info underscore

  9. asp.net LINQ连接数据库SQL执行数据的增加、修改、删除、查询操作

    查询数据库中的数据 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  10. b/s结构的物业管理系统(一)-------登录篇

    最近计划做一个非框架的物业管理系统前端使用bootstrap js jquery 等希望各位指点一下共同学习 ---前端登录页面------ 这个页面的输入框组用的bootstrap的,我设置了几张背 ...