实例034 使用SAX组件解析XML元素属性和属性值
2013-09-07 18:00
941 查看
实例034 使用SAX组件解析XML元素属性和属性值
在XML中每个元素都可能含有属性。属性是针对元素而言的,包含属性名称和属性值。本实例的XML文档中含有两本图书,每本图书都有自己的价格,也就是每个book元素中都包含一个price子元素,但是其内容可能是不一样的。price元素包含两个属性,即unit和unitType。每个price元素既可以有同样的属性,也可以有不同的属性。本实例实现了如何获取XML元素的属性和属性值,如图1.35所示。
SAX每次开始读取XML元素时,startElement()方法都会被执行。使用AttributeSAXParsing类重写 DefaultHandler类的startElement()方法可以获取元素属性和属性值,语法如下。
参数说明
uri:表示XML元素命名空间,在这里就是http://www.mingrisoft.com。
localName:表示XML元素的本地标示符,在这里就是name、publisher、company、author、ISBN等。
qName:表示元素在XML文件中使用的名称,在这里就是book:name、book:publisher、book:company、book:author、book:ISBN等。
attributes:表示当前元素的属性集合。
(1)创建一个XML文档用于SAX解析,代码如下:
(2)创建AttributeSAXParsing类,继承DefaultHandler类,重写startElement()方法读取属性和属性值,再把它们拼成一个字符串存储在List里。一个元素可能有多个属性,所以使用attributes中的getLength()方法,可以获取当前元素属性的个数。在这个属性集合中,getLocalName()方法可获取当前元素第几个属性的名称;getValue()方法中参数是几就表示当前元素的第几个属性值。代码如下:
(3)创建parseReadFile()方法把AttributeSAXParsing实例传入解析器,实现XML的解析。代码如下:
(4)创建main()方法,使用AttributeSAXParsing解析books.xml文件,输出属性名称和属性值到控制台。
心法领悟034:使用startElement获取属性的名称和值。
本实例中使用startElement()获取了属性的名称和值。attributes是startElement()方法的一个参数,通过它可以获取当前元素的所有属性集合和属性其他相关信息。例如,使用getIndex()方法获取某个属性的索引值,使用getType()获取某个属性的类型,使用getQName()获取某个属性的XML元素名称等。
在XML中每个元素都可能含有属性。属性是针对元素而言的,包含属性名称和属性值。本实例的XML文档中含有两本图书,每本图书都有自己的价格,也就是每个book元素中都包含一个price子元素,但是其内容可能是不一样的。price元素包含两个属性,即unit和unitType。每个price元素既可以有同样的属性,也可以有不同的属性。本实例实现了如何获取XML元素的属性和属性值,如图1.35所示。
(点击查看大图)图1.35 使用SAX组件解析XML元素属性和属性值 |
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
参数说明
uri:表示XML元素命名空间,在这里就是http://www.mingrisoft.com。
localName:表示XML元素的本地标示符,在这里就是name、publisher、company、author、ISBN等。
qName:表示元素在XML文件中使用的名称,在这里就是book:name、book:publisher、book:company、book:author、book:ISBN等。
attributes:表示当前元素的属性集合。
(1)创建一个XML文档用于SAX解析,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!--声明XML文档版本与字符编码方式--> <book:books xmlns:book="http://www.mingrisoft.com" <!--声明命名空间--> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mingrisoft.com books.xsd"> <!--声明命名空间的存储地址--> <book:book> <book:name>《C#从入门到精通(第2版)》</book:name> <book:publisher>清华大学出版社</book:publisher> <book:company>明日科技</book:company> <book:author>王小科</book:author> <book:ISBN>9787302226628</book:ISBN> <book:price unit="yuan" unitType="RMB">69.80</book:price> <book:url>http://www.mingribook. com/bookinfo.php?id=227</book:url> </book:book> <book:book> <book:name>《JavaScript开发技术大全》</book:name> <book:publisher>人民邮电出版社</book:publisher> <book:company>明日科技</book:company> <book:author>梁冰</book:author> <book:ISBN>9787115179708</book:ISBN> <book:price unit="yuan" unitType=" RMB">65.00</book:price> <book:url>http://www.mingribook. com/bookinfo.php?id=138</book:url> </book:book> </book:books>
(2)创建AttributeSAXParsing类,继承DefaultHandler类,重写startElement()方法读取属性和属性值,再把它们拼成一个字符串存储在List里。一个元素可能有多个属性,所以使用attributes中的getLength()方法,可以获取当前元素属性的个数。在这个属性集合中,getLocalName()方法可获取当前元素第几个属性的名称;getValue()方法中参数是几就表示当前元素的第几个属性值。代码如下:
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //读取属性名称和属性值,保存在List中 for (int i = 0; i < attributes.getLength(); i++) { attribute.add(localName + " = " + attributes.getLocalName(i) + ":"+ attributes.getValue(i)); } }
(3)创建parseReadFile()方法把AttributeSAXParsing实例传入解析器,实现XML的解析。代码如下:
public void parseReadFile(String pathname) { SAXParser parser; SAXParserFactory factory = SAXParserFactory. newInstance(); //获取SAXParserFactory实例 try { factory.setValidating(true); factory.setNamespaceAware(true); parser = factory.newSAXParser(); //获取SAXParser实例 File file = new File(pathname); //获取XML文件 parser.parse(file, this); //解析XML文件 } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
(4)创建main()方法,使用AttributeSAXParsing解析books.xml文件,输出属性名称和属性值到控制台。
public static void main(String[] arg) { String pathname = "xmldemo/books.xml"; AttributeSAXParsing elementSAXParsing = new AttributeSAXParsing(); elementSAXParsing.parseReadFile(pathname); //解析XML文件 System.out.println("属性名称和属性值"); System.out.println(elementSAXParsing. getAttribute()); //输出结果到控制台 }
心法领悟034:使用startElement获取属性的名称和值。
本实例中使用startElement()获取了属性的名称和值。attributes是startElement()方法的一个参数,通过它可以获取当前元素的所有属性集合和属性其他相关信息。例如,使用getIndex()方法获取某个属性的索引值,使用getType()获取某个属性的类型,使用getQName()获取某个属性的XML元素名称等。
相关文章推荐
- 【慕课笔记】2-2 应用DOM方式解析XML—使用DOM解析XML文件的属性名和属性值
- 【慕课笔记】3-2 应用SAX方式解析XML—使用SAX解析XML文件的节点属性
- SAX解析XML实例——根据结点属性查找该结点包含的信息
- 使用JAXB实现JAVA解析XML (节点大小写和属性的互相转换实例
- dom4j 解析元素无属性和有属性的xml文件,都使用反射进行注值
- Java使用DOM解析XML的文件属性名和属性值、节点名和节点值
- 使用DOM解析XML的文件属性名和属性值、节点名和节点值
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 实例解析Android中使用Pull解析器解析XML的方法
- PHP使用xpath解析XML实例教程
- Android 使用SAX或者DOM或者pull解析XML文件
- PHP中使用DOM读取解析XML属性值一例
- [libexpat]_[XML处理]_[C/C++使用libexpat库以数据流(SAX模型)的方式读取(解析)大XML文件]
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用java解析xml的实例程序
- Java XML解析工具 dom4j介绍及使用实例
- Android中使用DOM解析xml时出现org.xml.sax.SAXParseException: Unexpected token
- 用SAX解析XML实例
- python类库31[使用SAX来解析xml]
- HTML5新增的表单元素和属性实例解析