Java-XML解析

XML

XML语法

XML的含义

1.XML是可扩展的标记语言,是一种常用的数据结构,用于简化的数据的存储和共享
2.是统一的标准文件格式,方便数据文件的交换
3.采用文本格式,统一了编码,方便直接联系
4.有统一的API,使用简单

标记

tag标记,标签
语法:开始标记<标记名>
结束标记</标记名>
标记名称,任意名称
一般都是英文
区分大小写
标记必须配对使用
不能使用单标记
标记可以嵌套,但是不能交叉嵌套
一个XML文件中只能有一个根标记

注释

注:XML文件中只能用XML注释,不能使用Java注释

内容

  1. 开始标记和结束标记之间的部分称为“内容“
  2. 文本内容:文字信息
  3. 子标记:嵌套在标记中的标记
  4. 标记和文本的混合体

元素

Element元素:开始标记+内容+结束标记的整体称为元素

  1. 标记的名也称为元素的名
  2. 一个XML文件中只有一个“根元素”

属性

Attribute属性:在开始标记上定义的key="value"称为元素的属性

  1. 在开始标记(标签)上定义
  2. 属性结构key=“value”
  3. 属性没有顺序,属性名不能重复
  4. 属性值必须使用引号
  5. 属性等号两边不要有空格,属性之间要有空格!

优点

1.可以任意扩展,描述数据,是通用的数据格式
2.严格的语法规定,可以使用通用的API解析,简化编程,提高开发效率

特殊符号

<:&lt >:&gt &:&amp ':&apos ":&quot
空格:&nbsp 版权:&copy 注册商标:&reg 商标:&trade

XML和HTML的区别

HTML相当于规定了标签名称,规定了标签嵌套相关的一种XML

XML解析

用编程语言读取XML文件中的内容,并且识别其中的语法,找到根元素,识别子元素,读取元素的文本内容等。

Dom4J API

开源的API

Maven包管理

1.Maven是项目管理工具,管理一个项目的生命周期,Maven功能非常强大。
2.Maven包管理功能:可以自动下载使用开源的API包。
3.使用步骤:
(1)配置国内的Maven仓库
(2)利用Maven搜索引擎,找到组件坐标
(3)将坐标放到pom文件中,自动下载组件

XML解析方式

xml的解析方式:
(1)SAX(Simple API for xml)解析:是一种速度快,更有效的方法,边扫描边解析,可在解析文档的任意时刻停止解析。
优点:解析立刻停止,速度快,没有内存压力
缺点:不能对节点进行修改SAX(与w3c没有任何关系)是解析xml的一种接口,以流的方式将xml文档读取到内存中,以事件模型的方式解析处理xml文档,获取xml文档中的内容。支持sax接口的解析器很多,但是没有一个主流的浏览器内置xml解析器支持SAX接口。

SAX解析方式

1.获取工厂实例;
2.得到解析器;
3.得到读取器;
4.设置内容处理器;
(一)第一步:新建一个工厂类SAXParserFactory,代码如下: SAXParserFactory factory = SAXParserFactory.newInstance();
(二)第二步:让工厂类产生一个SAX的解析类SAXParser,代码如下: SAXParser parser = factory.newSAXParser();
(三)第三步:从SAXPsrser中得到一个XMLReader实例,代码如下: XMLReader reader = parser.getXMLReader();
(四)第四步:把自己写的handler注册到XMLReader中,一般最重要的就是ContentHandler,代码如下: reader.setContentHandler(this);
(五)第五步:将一个xml文档或者资源变成一个java可以处理的InputStream流后,解析正式开始,代码如下:
reader.parse(new InputSource(is));

实例

<books>
<!--  开始标记  -->
<book id="b1" lang="zh">
<name><18&岁的我></name>
<author>冯唐</author>
</book>
<book lang="zh" id="b2">
<name>檀香刑</name>
<author>莫言</author>
</book>
<book id="b3" lang="zh">
<name>我的日子</name>
<author>三十</author>
<note>
<![CDATA[ 
 这是一个段话 可以 使用任何符号 
 age > 30 & times < 50 
 ]]>
</note>
</book>
</books>
<!--  结束标记  -->
<!--  根标记只能有一个  -->

解析案例

 
import java.io.FileInputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Demo01 {

	public static void main(String[] args) 
			throws Exception {
		/*
		 * 打开XML文件
		 */
		String filename = "demo.xml";
		FileInputStream fis=new FileInputStream(filename);
		/*
		 * 利用Dom4J提供的高级流,读取fis
		 * reader.read(fis) 将低级流fis中的文件
		 * 数据解析为一个对象 doc。对象中包含demo.xml 中的全部数据
		 */
		SAXReader reader = new SAXReader();
		Document doc = reader.read(fis);
		fis.close();//关闭流
		//doc.asXML 输出 doc 对象中的信息
		//System.out.println(doc.asXML());
		/*
		 * Document 对象提供了获取根元素的方法
		 * Element 元素 
		 * doc.getRootElement() 返回根元素对象
		 */
		Element root=doc.getRootElement(); 
		System.out.println(root.asXML()); 
		/*
		 * 利用Root Element 可以读取XML文件中
		 * 的全部内容
		 * 元素上提供了获取其内部一组子元素的方法
		 * root.elements("root")
		 * 
		 * 读取全部书的名字
		 * 
		 * 获取一个子元素 
		 * e.element("name") 
		 * 
		 * List<泛型> 泛型的用途约束集合中元素类型
		 *   可以完成自动类型转换
		 * List<Element>
		 */
		List<Element> list=root.elements("book");
		for(Element e:list) {
			//e 就是 book 元素 
			//System.out.println(e.asXML());
			//在e元素上获取一个叫“name”的子元素
			//Element n = e.element("name");
			//获取元素上的文字,并且去除前后空白
			//String name = e.element("name").getTextTrim();
			// e.element("name").getTextTrim() 完全相当于 
			// e.elementTextTrim("name")
			String name=e.elementTextTrim("name");
			String author=e.elementTextTrim("author");
			System.out.println(name+"-"+author); 
			
			/*
			 * 在元素上读取属性:
			 * 属性值 = e.attributeValue(属性名) 
			 */
			String id = e.attributeValue("id");
			System.out.println(id); 
			
			Element note = e.element("note");
			if(note!=null) {
				System.out.println(note.getTextTrim()); 
			}
		}
 
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值