您的位置:首页 > 其它

SAX实现对XML文件的解析

2015-09-17 15:53 113 查看
  可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言。可扩展即可自定义标记语言。

与HTML相比,XML是被设计为传输和存储数据,其焦点是数据的内容。而HTML是被设计用来显示数据的,侧重在数据的外观。其二,

在语法上,HTML的标记并不是所有的都需要成对出现,不区分大小写;但XML严格要求成对出现,且大小写敏感。

SAX的原理:

  SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束等等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。

 大多数SAX实现都会产生以下类型的事件:

   1)在文档的开始和结束时触发文档处理事件

   2)在文档内每一XML元素接受解析的前后触发元素事件

   3)任何元素据通常都由单独的事件交付

   4)在处理文档的DTD或Schema时产生DTD或Schema事件

   5)产生错误事件用来通知主机应用程序解析错误

简单实例:

public class XMLHandler extends DefaultHandler{

//DefaultHandler与MouseAdapter作用一样

//以下方法为选择性实现ContentHandler接口中的5个抽象方法

@Override

public void startDocument() throws SAXException{

super.startDocment();

System.out.println("-------startDocument--------------");

}

@Override

public void endDocument() throws SAXException {

super.endDocument();

System.out.println("-------endDocument--------------");

}

@Override

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

//localName是带后缀标记 qName是不带后缀的标记 attributes是标签属性,例如ID

super.startElement(uri, localName, qName, attributes);

System.out.println("-------startElement--------------");

System.out.println("startElement loaclName="+localName);

for(int i=0;i<attributes.getLength();i++){

System.out.println(attributes.getLocalName(i)+"="+attributes.getValue(i));

}

}

@Override

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

super.startElement(uri, localName, qName);
System.out.println("-------endElement------------LocalName="+localName);

}

@Override

public void characters(char[] ch, int start, int length)throws SAXException{

super.characters(ch,start,length);

System.out.println("-------characters--------------");

//构造字符串

String content=new String(ch,start,length);

System.out.println("content="+content);

}

}

给定一份文件user.xml

<?xml version="1.0" encoding="UTF-8"?>

<users>

<user id="1" color="red">

<name>张三</name>

<sex>男</sex>

<address>衡阳</address>

</user>

<user id="2">

<name>李四</name>

<sex>女</sex>

<address>长沙</address>

</user>

</users>

进行解析步骤

1.得到SAX解析工厂类对象

SAXParserFactory factory=SAXParserFactory.newInstance();

2.获取SAX解析器

SAXParser parser=factory.getXMLReader();

reader.setContentHandler(new XMLHandler()); //xml解析器会调用ContentHandler接口中相应的方法来响应该事件。

reader.parse(new InputSource(new StringReader(resultStr))); //resultStr是指user.xml文件内容(IO处理为String类型)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: