zoukankan      html  css  js  c++  java
  • 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”类。



  • 相关阅读:
    mybatis-spring 集成
    maven 插件深入了解
    maven 常用插件3
    maven 插件2
    <转载> maven 详解 http://www.cnblogs.com/binyue/p/4729134.html
    linux base shell 基础语法
    浏览器运行原理
    <转载> js 闭包
    dubbo 学习资料
    HTTP
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5392961.html
Copyright © 2011-2022 走看看