Java用SAX解析XML文件示例
来源:互联网 发布:qq语音输入软件 编辑:程序博客网 时间:2024/06/04 18:54
本文转自新浪博客:http://blog.sina.com.cn/s/blog_492dbb6b0100fa4a.html
此文的方法是SAXParser的基本用法,在Android开发中同样适用。
以下为原文:
SAX 解析器采用了基于事件的模型,它在解析 XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。
下面以两种类型的XML架构说明SAX对xml文件的解析:
一、 获取元素属性值
<?xml version="1.0" encoding="UTF-8"?><emps> <emp id="1"> <name>zhangsan</name> <sex>man</sex> </emp> <emp id="2"> <name>lisi</name> <sex>women</sex> </emp></emps>
命名为example.xml
在本例中我们将读取元素<emp>的属性id=1和id=2,代码如下:
import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler;public class SAXParserTest extends DefaultHandler{ public SAXParserTest() { super(); } public void startElement(String uri,String localName,String qName,Attributes attr){ if(attr.getLength()>0){ for(int i = 0;i<attr.getLength();i++){ System.out.println(attr.getQName(i)+" = "+attr.getValue(i)); } } } public static void main(String[] args){ try{ //实例化用于分析的工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); //实例化分析类 SAXParser parser = factory.newSAXParser(); SAXParserTest handler = new SAXParserTest(); parser.parse("example.xml",handler); }catch(Exception e){ System.out.println(e.toString()); } } }
二、获取元素块名字属性值
<?xml version="1.0"?><?xml-stylesheet type="text/xsl"?><property> <name>search.response.default.numrows</name> <value>10</value> <description> The default number of rows to return if none is specified. </description></property> <property> <name>searcher.response.maxage</name> <value>86400</value> <description> The maxage of a response in seconds. Used in caching headers. </description></property></configuration>
命名为nutch-default.xml
在本例中我们将读取<name>和<value>所表示的值,即<name>=<value>,代码如下:
import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler;import org.xml.sax.SAXException;import java.util.Properties;public class SAXParserTest2 extends DefaultHandler{ private Properties props; //用于存放名字属性对(key-value) private String currentName; //当前扫描到的键值 private StringBuffer currentValue = new StringBuffer(); //当前名字对应的值 private String Name,Value;//键值对 public SAXParserTest2(){ super(); this.props=new Properties(); } public void startElement(String uri,String localName,String qName,Attributes attr){ currentValue.delete(0,currentValue.length()); this.currentName=qName; } //碰到节点开始和结束之间的字符<element>***</element> public void characters(char[] ch,int start,int length) throws SAXException{ currentValue.append(ch,start,length); } //碰到节点结束</element> public void endElement(String uri,String localName,String qName){ String name=currentName,value=currentValue.toString().trim(); if(name!=""&&value!="") System.out.println(name+"="+value); if(name=="name") Name=value; if(name=="value") Value=value; if(qName=="property") props.put(Name,Value); this.currentName=""; currentValue.delete(0,currentValue.length()); } public String getElementValue(String elementName){ //elementValue:对应于elementName的节点的属性值 String elementValue=null; elementValue=props.getProperty(elementName); return elementValue; } public static void main(String[] args) { try{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); SAXParserTest2 handler = new SAXParserTest2(); parser.parse("nutch-default.xml",handler); System.out.println(handler.getElementValue("searcher.response.maxage ")); }catch(Exception e){ System.out.println(e.toString()); } } }//参见:http://www.cnblogs.com/foresthjj/articles/863147.html//http://damiao-cn.javaeye.com/blog/228941
后记:
下面是XMLReader的用法:
SAXParserFactory parserFactory = SAXParserFactory.newInstance(); try { XMLReader xmlReader = parserFactory.newSAXParser().getXMLReader(); SAXParserTest2 handler = new SAXParserTest2(); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(new StringReader(result))); } catch (Exception e) { e.printStackTrace(); }
1 0
- Java用SAX解析XML文件示例
- Java用SAX解析XML文件示例
- java-SAX解析XML示例
- java SAX解析XML文件
- Java Sax解析xml文件
- Java Sax解析XML文件
- Java Sax解析xml文件
- JAVA SAX解析XML文件
- Java SAX解析xml文件
- java sax解析xml文件
- java SAX解析XML文件
- Java SAX 解析xml文件
- Java XML解析 - 使用SAX 示例
- 用SAX解析xml文件
- 用SAX解析xml文件
- 用SAX 解析XML文件
- Java 解析 XML 文件之 SAX 解析
- Java用SAX解析XML
- core power limit normal问题解决方法
- html5 进度条显示实例
- 跳转 App Store 评分 适配IOS7
- vc++中_RecordsetPtr使用
- 开发板作为USB设备模拟网卡(linux usb 网卡)--gadget&&rndis|cdc
- Java用SAX解析XML文件示例
- Spinner适配器为ArrayAdapter或者SimpleAdapter
- sql字符串已逗号分隔
- Postfix+SSL配置
- CRF 简介入门
- 设计模式之命令模式
- JNI 制作头文件时使用javah命令出错
- 建造者 -- 复杂对象的组装与创建
- json与jsonp