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

    自 http://blog.csdn.net/liuxuejiang158blog/article/details/14100897 __thread是GCC内置的线程局部存储设施,存取效率可以和全局 ...

  2. Apache 配置 WebSocket 协议

    本文使用 http proxy 方式 实现 apache 支持  WebSocket 请求(JK 使用的 ajp 协议不能支持websocket) 通过 apache 访问 后端 tomcat上的 w ...

  3. shellinabox基于web浏览器的终端模拟器

    1. Shellinabox介绍 Shellinabox 是一个利用 Ajax 技术构建的基于 Web 浏览器的远程终端模拟器,也就是说安装了该软件之后,服务器端不需要开启 ssh服务,通过 Web  ...

  4. WebKit的CSS扩展(WebKit是私有属性)

    http://www.css88.com/webkit/-webkit-touch-callout/ -webkit-tap-highlight-color 是一个 不规范的属性(unsupporte ...

  5. 利用BeautifulSoup抓取新浪网页新闻的内容

    第一次写的小爬虫,python确实功能很强大,二十来行的代码抓取内容并存储为一个txt文本 直接上代码 #coding = 'utf-8' import requests from bs4 impor ...

  6. gulp 学习笔记 (初识)

    根据极客学院入门视频整理 一.gulp介绍,主要提到了gulp是基于流式来管理运行的,目前完全搞不懂这一套专业术语. 二.gulp的安装使用. 1.首先需要在全局环境下安装gulp npm insta ...

  7. web开发漫谈

    本文同步至微信公众号http://mp.weixin.qq.com/s?__biz=MzAxMzgwNDU3Mg==&mid=401950045&idx=1&sn=cec056 ...

  8. NOR Flash擦写和原理分析

    NOR Flash擦写和原理分析 1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直 ...

  9. jquery 原理

    /* * my-jquery-1.0 *//* * 网上也有很多实现的版本,不过这是我在我自己的理解下写的,加上注释,希望可以解释清楚.*//* * 整个jquery包含在一个匿名函数中,专业点叫闭包 ...

  10. IE6 7下常见CSS兼容性处理

    以下是一些比较常见的IE6 7下的兼容性问题. 在当下这个时代,其实我们几乎可以不用再去针对IE6做兼容性的处理,除非你的公司还是诡异的要求你兼容到IE6.但是了解一些常见的兼容性问题还是可以帮助我们 ...