Java XML使用及解析

介绍

    XML全称为Extensible Markup Language,意思是可扩展的标记语言,通常只使用1.0版本。

作用:
  1、存放数据
  2、配置文件

要求:
  1.必须要有文档声明
    a.以<?xml开头 以?>结尾
    b.文档声明必须要从第一个字符开始
    c.文档声明只有2个属性 version=“1.0” (1.1) encoding=“UTF-8”
  2.必须要有根节点
    a.文档中的所有节点都是成对出现的 或者单个带结束符 /
成对出现标签名称必须要完全一样,尾标签要加/,命名规则 和java中变量类似,支持中文(外部闭合)
单个标签以/结尾(内部闭合)
可以嵌套但是不允许交叉,同一个节点中的节点必须要完整
    b.根节点 同层唯一的,最大的,最顶层的节点
  3.有合格的元素和属性
    a.属性必须要写在开始节点中
    b.一般情况属性都是键值对,键是字符串不加引号,值也是字符串要加引号(单双引号都支持)
    c.单个标签中属性要唯一
  4.要有正确的注释 <!-- -->
  5.转义字符(重点) 本身字符含义被占用需要转义
批量实现文本转义CDATA 文本区域
  6.xml要以.xml结尾

约束:
  1.DTD约束
    在文档声明中添加dtd约束 (DOCTYPE 中添加)
    DOCTYPE 中指明的节点是当前文档的根节点

    <!ELEMENT beans (bean*,import*)>
    a.ELEMENT代表节点的定义 beans 代表节点的名称
括号代表包含bean,import
    , 表示两个元素之间关系,为顺序
    | 表示两个元素之间关系,为选中
    * 表示当前修饰出现次数,为任意
    + 表示当前修饰出现次数,为至少有一个(>=0)
    ? 表示当前修饰出现次数,为0或1
    #PCDATA代表内容是文本

    <!ATTLIST bean id CDATA #REQUIRED className CDATA #REQUIRED >
    2.ATTLIST代表节点的属性定义
    bean代表节点的名称
    id和className都是属性的名称 CDATA代表文本 #REQUIRED代表必填
    属性的类型 CDATA代表文本,ID类型代表元素唯一,枚举(e1|e2)
    属性的约束 #REQUIRED 表示必须 #IMPLIED 表示可选

  2.Schema约束(用XML来约束XML)
    Schema是新的XML文档约束功能更强大,数据类型更完善且支持名称空间,是DTD 替代者;其本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。

    a.以.xsd结尾
    b.schema约束引用的地方是根节点
    c.命名空间通过xmlns 来指定(xmlns代表默认),如果xmlns后面使用别名,xml使用的位置全部都要使用别名
    d.element代表节点,schema中的嵌套关系就是现实节点的嵌套关系
    e.定义类型描述 complexType(复杂类型) ,simpleType(简单类型)
    f.如果有子标签
      <choice>选择,
      <sequence>顺序,
      <all>任意
        minOccurs最少出现次数
        maxOccurs最大出现次数,unbounded不限制(没有边)
    g.<attribute> 定义属性,要求要在element节点内 name代表属性的名称 use设置属性使用(required:必填 optional:可选)

解析

  开发中比较常见的解析方式有三种,如下:

  1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
    a) 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
    b) 缺点:XML文档过大,可能出现内存溢出显现。
  2. SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。
    a) 优点:处理速度快,可以处理大文件
    b) 缺点:只能读,逐行后将释放资源。
  3. PULL:Android内置的XML解析方式,类似SAX。
    解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。

   常见的解析开发包:
   JAXP:sun公司提供支持DOM和SAX开发包
   JDom:dom4j兄弟
   jsoup:一种处理HTML特定解析开发包
   dom4j:比较常用的解析开发包,hibernate底层采用。

domj4解析:
  常用API如下:

  1. SaxReader对象
    a) read(…) 加载执行xml文档
  2. Document对象
    a) getRootElement() 获得根元素
  3. Element对象
    a) elements(…) 获得指定名称的所有子元素。可以不指定名称
    b) element(…) 获得指定名称第一个子元素。可以不指定名称
    c) getName() 获得当前元素的元素名
    d) attributeValue(…) 获得指定属性名的属性值
    e) elementText(…) 获得指定名称子元素的文本值
    f) getText() 获得当前元素的文本内容
public void testParse() throws DocumentException{
	
	//1.核心类
	SAXReader saxReader = new SAXReader();
	
	//2.获得Document(整个xml)
	Document document = saxReader.read("beans.xml");
	
	//3.获得根元素 beans
	Element rootElement = document.getRootElement();
	
	//4.所有子元素 bean
	List<Element> allBeanElement = rootElement.elements("bean");
	for (Element beanEle : allBeanElement) {
		//4.1 bean属性
		String id = beanEle.attributeValue("id");
		String className = beanEle.attributeValue("className");
		System.out.println("bean属性:" + id + " , " + className);
		
		//5.子元素property
		List<Element> allPropElement = beanEle.elements("property");
		for (Element propEle : allPropElement) {
			String name = propEle.attributeValue("name");
			String value = propEle.attributeValue("value");
			System.out.println("property属性:" + name + " , " + value);
		}
		
		System.out.println();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值