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”类。



  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5392961.html
Copyright © 2011-2022 走看看