8.DOM、SAX和JAXP解析
9.JAXP的SAX支持
Ps:一般只用第二组API方法,因为比第一组方便。10.应用之【SAX解析XML文档】
packagecom.muke.sax; importjava.io.IOException; importjavax.xml.parsers.ParserConfigurationException; importjavax.xml.parsers.SAXParser; importjavax.xml.parsers.SAXParserFactory; importorg.xml.sax.SAXException; importcom.muke.sax.handler.MuKeHandler; publicclassSAXParse { publicstaticvoidmain(String[] args) throwsParserConfigurationException, SAXException, IOException { //创建SAX解析器工厂SAXParserFactoryfactory=SAXParserFactory.newInstance(); //创建SAX解析器SAXParserparser=factory.newSAXParser(); //开始解析XML文档parser.parse("D://firstxml.xml", newMuKeHandler()); } }
packagecom.muke.sax.handler; importorg.xml.sax.Attributes; importorg.xml.sax.SAXException; importorg.xml.sax.helpers.DefaultHandler; publicclassMuKeHandlerextendsDefaultHandler { //定义一个变量来保存当前正在处理的tagprivateStringcurrentTag; //每当处理文本数据时将触发该方法@Overridepublicvoidcharacters(char[] ch, intstart, intlength) throwsSAXException { Stringcontent=newString(ch,start,length); if (content.trim().length()>0) { System.out.println("<"+currentTag+">元素的值是:"+content.trim()); } } //解析文档结束时触发该方法@OverridepublicvoidendDocument() throwsSAXException { System.out.println("解析文档结束"); } //解析元素结束时触发该方法@OverridepublicvoidendElement(Stringuri, StringlocalName, StringqName) throwsSAXException { System.out.println("处理元素结束:"+qName); } //每当解析文档开始时触发该方法@OverridepublicvoidstartDocument() throwsSAXException { System.out.println("解析文档开始"); } @OverridepublicvoidstartElement(Stringuri, StringlocalName, StringqName, Attributesattributes) throwsSAXException { System.out.println("开始处理元素:"+qName); currentTag=qName; if (attributes.getLength()>0) { System.out.println("<"+currentTag+">元素的属性如下:"); for (inti=0; i<attributes.getLength(); i++) { System.out.println(attributes.getQName(i)+"--->"+attributes.getValue(i)); } } } }
File: <?xmlversion="1.0"encoding="utf-8"?><书籍列表><计算机书籍><书名>Java思想</书名><作者>小王</作者><价格>79.00</价格></计算机书籍><计算机书籍><书名>Sprint指南</书名><作者>小李</作者><价格>89.00</价格></计算机书籍></书籍列表>
Console:解析文档开始开始处理元素:书籍列表开始处理元素:计算机书籍开始处理元素:书名<书名>元素的值是::Java思想处理元素结束:书名开始处理元素:作者<作者>元素的值是:小王处理元素结束:作者开始处理元素:价格<价格>元素的值是:79.00处理元素结束:价格处理元素结束:计算机书籍开始处理元素:计算机书籍开始处理元素:书名<书名>元素的值是:Sprint指南处理元素结束:书名开始处理元素:作者<作者>元素的值是:小李处理元素结束:作者开始处理元素:价格<价格>元素的值是:89.00处理元素结束:价格处理元素结束:计算机书籍处理元素结束:书籍列表解析文档结束
11.应用之【SAX生成XML文档】
packagecom.muke.sax; importjava.io.File; importjavax.xml.transform.OutputKeys; importjavax.xml.transform.Result; importjavax.xml.transform.Transformer; importjavax.xml.transform.sax.SAXTransformerFactory; importjavax.xml.transform.sax.TransformerHandler; importjavax.xml.transform.stream.StreamResult; importorg.xml.sax.helpers.AttributesImpl; publicclassBuildXMLMain { publicstaticvoidmain(String[] args) throwsException { //创建保存XML的结果流对象ResultresultXML=newStreamResult(newFile("D://firstxml1.xml")); //获取sax生成工厂实例SAXTransformerFactorysaxTransformerFactory=(SAXTransformerFactory) SAXTransformerFactory.newInstance(); //获取SAX生成处理者对象实例TransformerHandlertransformerHandler=saxTransformerFactory.newTransformerHandler(); transformerHandler.setResult(resultXML); //获取SAX生成器Transformertransformer=transformerHandler.getTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 允许有空格//生成文档的开始transformerHandler.startDocument(); AttributesImplattrImpl=newAttributesImpl(); // 设置属性transformerHandler.startElement("", "", "书籍列表", attrImpl); //第一本书transformerHandler.startElement("", "", "计算机书籍", attrImpl); transformerHandler.startElement("", "", "书名", attrImpl); transformerHandler.characters("Java思想".toCharArray(), 0, "Java思想".length()); transformerHandler.endElement("", "", "书名"); transformerHandler.startElement("", "", "作者", attrImpl); transformerHandler.characters("小王".toCharArray(), 0, "小王".length()); transformerHandler.endElement("", "", "作者"); transformerHandler.startElement("", "", "价格", attrImpl); transformerHandler.characters("79.00".toCharArray(), 0, "79.00".length()); transformerHandler.endElement("", "", "价格"); transformerHandler.endElement("", "", "计算机书籍"); //第二本书transformerHandler.startElement("", "", "计算机书籍", attrImpl); transformerHandler.startElement("", "", "书名", attrImpl); transformerHandler.characters("Spring指南".toCharArray(), 0, "Spring指南".length()); transformerHandler.endElement("", "", "书名"); transformerHandler.startElement("", "", "作者", attrImpl); transformerHandler.characters("小李".toCharArray(), 0, "小李".length()); transformerHandler.endElement("", "", "作者"); transformerHandler.startElement("", "", "价格", attrImpl); transformerHandler.characters("89.00".toCharArray(), 0, "89.00".length()); transformerHandler.endElement("", "", "价格"); transformerHandler.endElement("", "", "计算机书籍"); transformerHandler.endElement("", "", "书籍列表"); //生成文档的结束transformerHandler.endDocument(); System.out.println("XML文档生成成功!"); } }
Console: XML文档生成成功!
File: <?xmlversion="1.0"encoding="UTF-8"?><书籍列表><计算机书籍><书名>Java思想</书名><作者>小王</作者><价格>79.00</价格></计算机书籍><计算机书籍><书名>Spring指南</书名><作者>小李</作者><价格>89.00</价格></计算机书籍></书籍列表>
12.XML文件解析 parse 方法详解
13.待更新...