1.首先,在main方法中解析xml文档,具体代码如下:
import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class Main { public static void main(String[] args) throws Exception { //创建一个文档解析器工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); SAXParser parser=factory.newSAXParser(); Handler handler=new Handler(); parser.parse("src/server.xml",handler); } }
其中,解析时parser.parse("src/server.xml",handler);第一个参数是xml文档的地址,第二个参数是具体的以什么规则解析这个xml文档。
2.重写Handler类,以自由操纵如何具体的解析xml文档的具体值
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class Handler extends DefaultHandler { //全局变量用于存储书籍的编号 int bookIndex=0; /*开始解析文档*/ @Override public void startDocument() throws SAXException { super.startDocument(); System.out.println("开始解析文档"); } /*结束解析文档*/ @Override public void endDocument() throws SAXException { super.endDocument(); System.out.println("结束解析文档"); } /*解析文档中所有的开始标签*/ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); //开始解析book元素的属性 if("book".equals(qName)){ bookIndex++; System.out.println("==========开始解析第"+bookIndex+"本书============"); //输出book元素的id属性,已知属性名,根据属性名获取属性值 //System.out.println("book的属性值是"+attributes.getValue("id")); //不知道属性名,只能遍历所有属性 int num=attributes.getLength(); for(int i=0;i<num;i++){ System.out.print("第"+(i+1)+"个属性名是"+attributes.getQName(i)); System.out.println(" 第"+(i+1)+"个属性值是"+attributes.getValue(i)); } } if(!qName.equals("book")&&!qName.equals("")){ System.out.println(qName); } } /*解析文档中所有的结束标签*/ @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if("book".equals(qName)) { System.out.println("============结束解析第" + bookIndex + "本书=========="); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String s=new String(ch,start,length); s=s.trim(); if(!s.equals("")){ System.out.println(s); } } }