javaweb学习总结十二(JAXP对XML文档进行SAX解析)

一:JAXP使用SAX方式解析XML文件

1:dom解析与sax解析异同点

2:sax解析特点

二:代码案例

1:xml文件

 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 2 <students>
 3     <student>
 4         <name sid="111">李四</name>
 5         <age>23</age>
 6         <gender>男</gender>
 7     </student>
 8     <student>
 9         <name sid="222">张三</name>
10         <age>21</age>
11         <gender>女</gender>
12     </student>
13 </students>

2:测试主体部分

 1 @Test
 2     public void testParseXml() throws ParserConfigurationException,
 3             SAXException, IOException {
 4         // 1:获取解析器工厂
 5         SAXParserFactory factory = SAXParserFactory.newInstance();
 6         // 2:获取解析器
 7         SAXParser parser = factory.newSAXParser();
 8         // 3:获取读取器
 9         XMLReader reader = parser.getXMLReader();
10         // 4:设置内容格式
11         reader.setContentHandler(new GetSecondNameHandler());
12         // 5:解析文件
13         reader.parse("xml/exam.xml");
14     }

a:获取整个xml文档标签的处理事件

 1 // 定义一个解析全文的解析器
 2 class MyHandler implements ContentHandler {
 3
 4     @Override
 5     public void setDocumentLocator(Locator locator) {
 6
 7     }
 8
 9     @Override
10     public void startDocument() throws SAXException {
11
12     }
13
14     @Override
15     public void endDocument() throws SAXException {
16
17     }
18
19     @Override
20     public void startPrefixMapping(String prefix, String uri)
21             throws SAXException {
22
23     }
24
25     @Override
26     public void endPrefixMapping(String prefix) throws SAXException {
27
28     }
29
30     @Override
31     public void startElement(String uri, String localName, String qName,
32             Attributes atts) throws SAXException {
33         System.out.println("<" + qName + ">");
34         // 获取元素的属性
35         for (int i = 0; i < atts.getLength(); i++) {
36             String attrName = atts.getQName(i);
37             String attrValue = atts.getValue(i);
38             System.out.println(attrName + "=" + attrValue);
39         }
40     }
41
42     @Override
43     public void endElement(String uri, String localName, String qName)
44             throws SAXException {
45         System.out.println("<" + qName + "/>");
46     }
47
48     @Override
49     public void characters(char[] ch, int start, int length)
50             throws SAXException {
51         System.out.println(new String(ch, start, length));
52     }
53
54     @Override
55     public void ignorableWhitespace(char[] ch, int start, int length)
56             throws SAXException {
57
58     }
59
60     @Override
61     public void processingInstruction(String target, String data)
62             throws SAXException {
63
64     }
65
66     @Override
67     public void skippedEntity(String name) throws SAXException {
68
69     }
70
71 }

b:定义“获取指定内容,获取第二个学生的名字”事件

 1 class GetSecondNameHandler extends DefaultHandler {
 2
 3     private String contentTag;
 4     private int currentTag = 0;
 5     private int getTag = 2;
 6
 7     @Override
 8     public void startElement(String uri, String localName, String qName,
 9             Attributes attributes) throws SAXException {
10         contentTag = qName;
11     }
12
13     @Override
14     public void endElement(String uri, String localName, String qName)
15             throws SAXException {
16         contentTag = null;
17     }
18
19     @Override
20     public void characters(char[] ch, int start, int length)
21             throws SAXException {
22         if ("name".equals(contentTag)) {
23             currentTag++;
24             if (currentTag == getTag) {
25                 System.out.println(new String(ch, start, length));
26             }
27
28         }
29     }
30
31 }

class GetSecondNameHandler extends DefaultHandler {
private String contentTag;private int currentTag = 0;private int getTag = 2;
@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {contentTag = qName;}
@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {contentTag = null;}
@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if ("name".equals(contentTag)) {currentTag++;if (currentTag == getTag) {System.out.println(new String(ch, start, length));}}}
}

时间: 2025-01-08 07:41:44

javaweb学习总结十二(JAXP对XML文档进行SAX解析)的相关文章

使用JAXP对XML文档进行DOM解析

一.XML解析方式分为两种:dom和sax dom:(Document Object Model,即文档对象模型)是W3C组织推荐的解析XML的一种方式. sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它. dom和sax解析方法的区别: dom:对文档CRUD(增删改查)比较方便,缺点:占用内存比较大(将xml文件全部读入内存). sax:占用内存较少,解析速度快(从上往下读一行解析一行).缺点:只适合读取,不适合CRU

javaweb学习总结十三(dom4j方式对XML文档进行解析)

一:dom4j方式介绍 对于xml的解析总共有三种 1:jaxp方式,是sun公司开发的,分为sax方式和dom方式 2:jdom方式,后来其中部分人员参与开发dom4j 3:dom4j方式,是现在企业使用比较多的一种方式 二:代码案例 1:读取xml文件中某个节点 1):获取第二个学生的名字 1 @Test 2 // 1:获取第二个学生的名字 3 public void test01() throws DocumentException { 4 // 1:获取解析器 5 SAXReader r

XML文档的SAX解析

xml文件: <?xml version="1.0" encoding="UTF-8"?> <books> <!--根节点--><!--这里的空白也算一个节点,所以books共有5个子节点--> <book id="book1" w="wwwww"> <name><a>AAAAAA</a>bookName1</name>

源生API解析XML文档与dom4j解析XML文档

一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可以存储数据. 1.XML语言书写的注意事项 1.XML标签命名自定义[推荐英文],标签名中不能包含空格 2.XML空格和换行都表示数据,严格区分大小写 3.XML中特殊字符表示的数据需要使用特殊字符编码和HTML一样 4.CDATA区中的数据不会被识别为语法 <![CDATA[王天霸<>&l

Java高级特性 第14节 解析XML文档(2) - SAX 技术

一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口. 1. SAX解析原理: 加载一点,读取一点,处理一点.对内存要求比较低. SAX解析工具内置在jdk中:org.xml.sax.*

使用Dom4j对XML文档创建与解析

创建XML文件: public class Dom4jCreateXml { public void testCreatXml() { //创建文档对象 Document document = DocumentHelper.createDocument(); //创建跟节点 Element root = document.addElement("students"); //根据根节点创建子节点 Element stu01 = root.addElement("student&

web前端【第十二篇】jQuery文档相关操作

一.相关知识点总结1.CSS .css() - .css("color") -> 获取color css值 - .css("color", "#ff0000") -> 设置值 - .css({"color": "#cccccc", "border": "1px solid #ff0000"}) -> 设置多个值 - .css(["color

XML文档的DOM解析

xml的DOM解析: <?xml version="1.0" encoding="UTF-8"?> <books> <!--根节点--><!--这里的空白也算一个节点,所以books共有5个子节点--> <book id="book1" w="wwwww"> <name><a>AAAAAA</a>bookName1</name

JavaWeb学习总结(十二)——Session

一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务. 二.Session和Cookie的主要区别 Cookie是把用户的数据写给用户的浏览器. Session技术把用户的数据写到用户独占的sess