SAX解析XML文件
发布时间:2020-12-16 05:58:39 所属栏目:百科 来源:网络整理
导读:java项目文件 package sax;import java.io.File;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.junit.Test;import org.xml
java项目文件 package sax; import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.junit.Test; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxTest { @Test public void test() throws ParserConfigurationException,SAXException,IOException { // 创建定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档。 // 使用SAXParserFactory创建SAX解析工厂 SAXParserFactory spf = SAXParserFactory.newInstance(); // 通过SAX解析工厂得到解析器对象 SAXParser sp = spf.newSAXParser(); // parse(File f,DefaultHandler dh)使用指定的 DefaultHandler(缺省处理程序) // 将指定文件的内容解析为 XML。 sp.parse(new File("src//sax//sida.xml"),new MyDefaultHandler()); } // 创建内部类,继承DefaultHandler(缺省处理程序)并重写程序执行中用到的方法 class MyDefaultHandler extends DefaultHandler { // 定义开关,用来开启一些方法 boolean flag = false; @Override // 重写文档的开始方法,这个方法在装载文档的时候会首先执行 public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); System.out.println("startDocument"); } @Override // 重写接收元素开始的通知。,当解析出来元素时会调用这个方法 // uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 // localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。 // qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。 // attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri,localName,qName,attributes); // 创建约束条件,只有符合约束的元素才会进入方法,// qName应该是元素对象的名称 if ("作者".equals(qName)) { flag = true; System.out.println("startElement"); } } @Override // 接收元素中字符数据的通知。 public void characters(char[] ch,int start,int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch,start,length); // 首先判断控制开关是否打开 if (flag) { // 输出元素对象,即两个标签之间所标注的文本内容(相当于DOM解析中的getNodeValue();操作) System.out.println(new String(ch,length)); } } @Override // 接收元素结束的通知。 public void endElement(String uri,String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri,qName); // 判断操作的标签对象是否符合规范 if ("作者".equals(qName)) { System.out.println("endElement"); // 关闭方法开关 flag = false; } } @Override // 接收文档结束的通知。 public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); //当文档加载完毕时操作此方法 System.out.println("endDocument"); } } }XML文件 <!DOCTYPE 四大名著[ <!ELEMENT 四大名著 (西游记,红楼梦)> <!ATTLIST 西游记 id ID #IMPLIED> ]> <四大名著> <西游记 id="x001"> <作者>吴承恩</作者> </西游记> <红楼梦 id="x002"> <作者>曹雪芹</作者> </红楼梦> </四大名著> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |