实例034 使用SAX组件解析XML元素属性和属性值
来源:互联网 发布:42u网络机柜尺寸 编辑:程序博客网 时间:2024/05/07 12:59
实例034 使用SAX组件解析XML元素属性和属性值
在XML中每个元素都可能含有属性。属性是针对元素而言的,包含属性名称和属性值。本实例的XML文档中含有两本图书,每本图书都有自己的价格,也就是每个book元素中都包含一个price子元素,但是其内容可能是不一样的。price元素包含两个属性,即unit和unitType。每个price元素既可以有同样的属性,也可以有不同的属性。本实例实现了如何获取XML元素的属性和属性值,如图1.35所示。
(点击查看大图)图1.35 使用SAX组件解析XML元素属性和属性值SAX每次开始读取XML元素时,startElement()方法都会被执行。使用AttributeSAXParsing类重写 DefaultHandler类的startElement()方法可以获取元素属性和属性值,语法如下。
- 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元素名称等。
- 实例034 使用SAX组件解析XML元素属性和属性值
- 使用SAX解析XML实例--根据属性查找
- 使用SAX解析XML实例
- dom4j 解析元素无属性和有属性的xml文件,都使用反射进行注值
- XML元素和属性
- 【慕课笔记】3-2 应用SAX方式解析XML—使用SAX解析XML文件的节点属性
- SAX解析XML实例——根据结点属性查找该结点包含的信息
- 使用DOM解析xml文件的属性和值
- sax解析xml实例
- Xml-Sax解析实例
- sax 解析xml实例
- SAX解析XML实例
- 4XML 元素和属性
- 使用JAXB实现JAVA解析XML (节点大小写和属性的互相转换实例
- 解析xml,获取值和属性
- XML解析之----SAX解析(带属性与不带属性)----自定义Handler类
- 使用SAX和dom4j解析XML文档
- 使用SAX解析XML
- Java技术加强之枚举
- Android中解析XML
- 腾讯面试题思考
- C++ 对象的内存布局
- InputStream与String,Byte之间互转
- 实例034 使用SAX组件解析XML元素属性和属性值
- 谈Objective-C Block的实现
- ListView与Adapter使用要点
- ARMv8 Linux内核异常处理过程分析
- 使用GCD
- oracle forall 介绍
- 转载: 如何在MATLAB 的MCC 命令 生成C/C++ 程序
- ACE框架解读 - 特性篇
- leetcode之Pow(x, n)