博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xml的解析与创建——bing到youdao导入文件的转换
阅读量:6206 次
发布时间:2019-06-21

本文共 5745 字,大约阅读时间需要 19 分钟。

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

转载于:https://www.cnblogs.com/engineerLF/p/5392961.html

你可能感兴趣的文章
peripheralStateNotificationCB
查看>>
(转) Spring读书笔记-----Spring的Bean之配置依赖
查看>>
精妙SQL语句收集(转)
查看>>
(转)android WebView loadData不能解析(找不到网页)
查看>>
IOS UIPageController
查看>>
.Net转Java自学之路—SpringMVC框架篇八(RESTful支持)
查看>>
博客作业05--查找
查看>>
python2x 安装 psutil
查看>>
Linux lsof命令详解
查看>>
C#接口实现多态
查看>>
BZOJ4127Abs——树链剖分+线段树
查看>>
node基础
查看>>
草稿--Windows消息机制
查看>>
python中的类的成员变量以及property函数
查看>>
matlab保存数据
查看>>
Python+Appium寻找蓝牙/wifi匹配
查看>>
刘汝佳 例题10-3 选择与除法
查看>>
线性表 - 数据结构和算法06
查看>>
2017.1.20活动
查看>>
C/C++实现删除字符串的首尾空格
查看>>