xml的四种解析方法及源代码.docx

上传人:牧羊曲112 文档编号:3169838 上传时间:2023-03-11 格式:DOCX 页数:37 大小:44.54KB
返回 下载 相关 举报
xml的四种解析方法及源代码.docx_第1页
第1页 / 共37页
xml的四种解析方法及源代码.docx_第2页
第2页 / 共37页
xml的四种解析方法及源代码.docx_第3页
第3页 / 共37页
xml的四种解析方法及源代码.docx_第4页
第4页 / 共37页
xml的四种解析方法及源代码.docx_第5页
第5页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《xml的四种解析方法及源代码.docx》由会员分享,可在线阅读,更多相关《xml的四种解析方法及源代码.docx(37页珍藏版)》请在三一办公上搜索。

1、xml的四种解析方法及源代码xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J) 第一种:SAX解析 SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理。 测试用的xml文件:db.xml Xml代码 !- oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:localhost:1521:oracle scott tiger !- ora

2、cle.jdbc.driver.OracleDriver jdbc:oracle:thin:localhost:1521:oracle scott tiger DTD文件db.dtd Xml代码 SAX解析实例一 org.xml.sax.DefalutHandler类: 可以扩展该类,给出自己的解析实现 SAXPrinter.java Java代码 import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attri

3、butes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXPrinter extends DefaultHandler /* */* * 文档开始事件 */ public void startDocument throws SAXException System.out.println(); /* */* * 接收处理指令事件 */ public void processingInstruction(String target, String data)

4、throws SAXException System.out.println(); /* */* * 元素开始事件 * 参数说明: * uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 * localName - 本地名称,如果没有正在执行名称空间处理,则为空字符串。 * qName - 限定的名称,如果限定的名称不可用,则为空字符串。 * attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 */ public void startElement(String uri, String

5、localName, String qName, Attributes attrs) throws SAXException System.out.print(+qName);/输出元素名称 int len=attrs.getLength;/元素属性列表长度 /利用循环输出属性列表 for(int i=0;i); /* */* * 元素中字符数据事件:接收元素中字符数据 * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外) * 2.有些解析器将使用ignorableWhitespace方法来报告元素内容中的空白,而不是characters方法,如:进行

6、有效性验证的解析器 */ public void characters(char ch, int start, int length) throws SAXException System.out.print(new String(ch,start,length); /* */* * 结束元素事件 */ public void endElement(String uri, String localName, String qName) throws SAXException System.out.print(); public static void main(String args) SAX

7、ParserFactory spf=SAXParserFactory.newInstance; try SAXParser sp=spf.newSAXParser; sp.parse(new File(db.xml),new SAXPrinter); catch (Exception e) e.printStackTrace; import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; impo

8、rt org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXPrinter extends DefaultHandler /* */* * 文档开始事件 */ public void startDocument throws SAXException System.out.println(); /* */* * 接收处理指令事件 */ public void processingInstruction(String target, String data) throws SAXE

9、xception System.out.println(); /* */* * 元素开始事件 * 参数说明: * uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 * localName - 本地名称,如果没有正在执行名称空间处理,则为空字符串。 * qName - 限定的名称,如果限定的名称不可用,则为空字符串。 * attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 */ public void startElement(String uri, String localName,

10、String qName, Attributes attrs) throws SAXException System.out.print(+qName);/输出元素名称 int len=attrs.getLength;/元素属性列表长度 /利用循环输出属性列表 for(int i=0;i); /* */* * 元素中字符数据事件:接收元素中字符数据 * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外) * 2.有些解析器将使用ignorableWhitespace方法来报告元素内容中的空白,而不是characters方法,如:进行有效性验证的解析器 *

11、/ public void characters(char ch, int start, int length) throws SAXException System.out.print(new String(ch,start,length); /* */* * 结束元素事件 */ public void endElement(String uri, String localName, String qName) throws SAXException System.out.print(); public static void main(String args) SAXParserFacto

12、ry spf=SAXParserFactory.newInstance; try SAXParser sp=spf.newSAXParser; sp.parse(new File(db.xml),new SAXPrinter); catch (Exception e) e.printStackTrace; SAX解析实例二 org.xml.sax.ContentHandler接口: 通过实现该接口给出自己的解析实现。 org.xml.sax.ErrorHandler接口:如果SAX应用程序需要实现定制的错误处理,那么它必须实现这个接口,并调用XMLReader对象的setErrorHandle

13、r方法向解析器注册异常处理实例,这样,解析器将通过这个接口报告所有的错误和警告。 ContentHandlerImpl.java Java代码 import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; public class ContentHandlerImpl implements ContentHandler /* */* * 文档开始事件 */ public void startDocumen

14、t throws SAXException System.out.println(); /* */* * 接收处理指令事件 */ public void processingInstruction(String target, String data) throws SAXException System.out.println(); /* */* * 元素开始事件 * 参数说明: * uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 * localName - 本地名称,如果没有正在执行名称空间处理,则为空字符串。 * qName

15、- 限定的名称,如果限定的名称不可用,则为空字符串。 * attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 */ public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException System.out.print(+qName);/输出元素名称 int len=attrs.getLength;/元素属性列表长度 /利用循环输出属性列表 for(int i=0;i); /* */* * 元素中字符数

16、据事件:接收元素中字符数据 * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外) * 2.有些解析器将使用ignorableWhitespace方法来报告元素内容中的空白,而不是characters方法,如:进行有效性验证的解析器 */ public void characters(char ch, int start, int length) throws SAXException System.out.print(new String(ch,start,length); /* */* * 结束元素事件 */ public void endEleme

17、nt(String uri, String localName, String qName) throws SAXException System.out.print(); public void endDocument throws SAXException public void endPrefixMapping(String prefix) throws SAXException public void ignorableWhitespace(char ch, int start, int length) throws SAXException public void setDocume

18、ntLocator(Locator locator) public void skippedEntity(String name) throws SAXException public void startPrefixMapping(String prefix, String uri) throws SAXException import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; public cl

19、ass ContentHandlerImpl implements ContentHandler /* */* * 文档开始事件 */ public void startDocument throws SAXException System.out.println(); /* */* * 接收处理指令事件 */ public void processingInstruction(String target, String data) throws SAXException System.out.println(); /* */* * 元素开始事件 * 参数说明: * uri - 名称空间 UR

20、I,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。 * localName - 本地名称,如果没有正在执行名称空间处理,则为空字符串。 * qName - 限定的名称,如果限定的名称不可用,则为空字符串。 * attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。 */ public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException System.out.print(+

21、qName);/输出元素名称 int len=attrs.getLength;/元素属性列表长度 /利用循环输出属性列表 for(int i=0;i); /* */* * 元素中字符数据事件:接收元素中字符数据 * 注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外) * 2.有些解析器将使用ignorableWhitespace方法来报告元素内容中的空白,而不是characters方法,如:进行有效性验证的解析器 */ public void characters(char ch, int start, int length) throws SAXExc

22、eption System.out.print(new String(ch,start,length); /* */* * 结束元素事件 */ public void endElement(String uri, String localName, String qName) throws SAXException System.out.print(); public void endDocument throws SAXException public void endPrefixMapping(String prefix) throws SAXException public void i

23、gnorableWhitespace(char ch, int start, int length) throws SAXException public void setDocumentLocator(Locator locator) public void skippedEntity(String name) throws SAXException public void startPrefixMapping(String prefix, String uri) throws SAXException ErrorHandlerImpl.java Java代码 public class Er

24、rorHandlerImpl implements ErrorHandler public void warning(SAXParseException e) throws SAXException System.out.println(Warning +getLocationString(e)+:+e.getMessage); public void error(SAXParseException e) throws SAXException System.out.println(Error +getLocationString(e)+:+e.getMessage); public void

25、 fatalError(SAXParseException e) throws SAXException System.out.println(Fatal Error +getLocationString(e)+:+e.getMessage); private String getLocationString(SAXParseException e) StringBuffer sb=new StringBuffer; String publicId=e.getPublicId; if(publicId!=null) sb.append(publicId); sb.append( ); Stri

26、ng systemId=e.getSystemId; if(systemId!=null) sb.append(systemId); sb.append( ); sb.append(e.getLineNumber); sb.append(:); sb.append(e.getColumnNumber); return sb.toString; 1. public class ErrorHandlerImpl implements ErrorHandler public void warning(SAXParseException e) throws SAXException System.ou

27、t.println(Warning +getLocationString(e)+:+e.getMessage); public void error(SAXParseException e) throws SAXException System.out.println(Error +getLocationString(e)+:+e.getMessage); public void fatalError(SAXParseException e) throws SAXException System.out.println(Fatal Error +getLocationString(e)+:+e

28、.getMessage); private String getLocationString(SAXParseException e) StringBuffer sb=new StringBuffer; String publicId=e.getPublicId; if(publicId!=null) sb.append(publicId); sb.append( ); String systemId=e.getSystemId; if(systemId!=null) sb.append(systemId); sb.append( ); sb.append(e.getLineNumber);

29、sb.append(:); sb.append(e.getColumnNumber); return sb.toString; SaxParserTest.java Java代码 import java.io.FileInputStream; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class SaxParserTest public static void main(String args) try XML

30、Reader xmlReader=XMLReaderFactory.createXMLReader; /关闭或打开验证 xmlReader.setFeature(http:/xml.org/sax/features/validation,true); /注册事件处理器 xmlReader.setContentHandler(new ContentHandlerImpl); /注册异常处理器 xmlReader.setErrorHandler(new ErrorHandlerImpl); xmlReader.parse(new InputSource(new FileInputStream(sa

31、xdb.xml); catch (Exception e) System.out.println(e.getMessage); import java.io.FileInputStream; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class SaxParserTest public static void main(String args) try XMLReader xmlReader=XMLReader

32、Factory.createXMLReader; /关闭或打开验证 xmlReader.setFeature(http:/xml.org/sax/features/validation,true); /注册事件处理器 xmlReader.setContentHandler(new ContentHandlerImpl); /注册异常处理器 xmlReader.setErrorHandler(new ErrorHandlerImpl); xmlReader.parse(new InputSource(new FileInputStream(saxdb.xml); catch (Exception e) System.out.println(e.getMessage); 第二种:DOM解析 DOM中的核心概念就是节点。D

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号