有道单词本导出后生成的是xml, 不方便看, 于是需要解析一下.
xml解析都忘了, 顺便学习一下.
用到两个类 , 如下:
第一个:就是死的那几步.
import java.io.File; import java.io.IOException; import java.util.HashMap; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; /** * 有道单词本单词生成. * @author lvxingang */ public class XmlParser { public static void main(String[] args) { // 初始化与解析 try { SaxHandler handler = new SaxHandler(); SAXParserFactory saxparserfactory = SAXParserFactory.newInstance(); SAXParser saxparser = saxparserfactory.newSAXParser(); saxparser.parse(new File("youdao.xml"), handler); } catch (Exception e) { e.printStackTrace(); } } }
第二个类.是DefaultHandler类.
public class SaxHandler extends DefaultHandler { // 当前元素中的数据 private String currentData; int i = 0; // 取得元素数据 public void characters(char[] ch, int start, int length) throws SAXException { currentData = new String(ch, start, length); } // 在解析元素开始时调用 public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { if(name.equalsIgnoreCase("word")){ System.out.print("单词: "); }else if(name.equalsIgnoreCase("trans")){ System.out.println("翻译:"); }else if(name.equalsIgnoreCase("phonetic")){ System.out.print("音标: "); }else if(name.equalsIgnoreCase("item")){ System.out.println(); System.out.println("第"+i+"个单词."); i++; } } // 在解析元素结束时调用 public void endElement(String uri, String localName, String name) throws SAXException { if(name.equalsIgnoreCase("word")||name.equalsIgnoreCase("trans")||name.equalsIgnoreCase("phonetic")) System.out.println(" " + this.currentData); } }
完成.
效果对比如下:
下一步再弄把它写到一个文本中, 应该很简单的. IO也忘了................啊............