首页 > 技术文章 > XML解析

lq123 2018-11-25 16:56 原文

XML解析

其实就是获取元素里面的字符数据或者属性数据

XML解析方式(面试常问)

有很多种,但是常用的有两种。
*DOM
*SAX

针对这两种解析方式的API

一些组织后者公司,针对以上两种解析方式,给出的解决方案有哪些?

jaxp sun公司。比较繁琐

jdom

dom4j 使用比较广泛

Dom4j 基本用法

1.创建sax读取对象
2.指定解析的xml源
3.得到根元素
4.获得子元素

代码:
First.XML

<?xml version="1.0" encoding="UTF-8"?>
	<stus>
		<stu>
			<name>张三</name>
			<age>18</age>
			<address>深圳</address>
		</stu>
		<stu>
			<name>李四</name>
			<age>28</age>
			<address>北京</address>
		</stu>
	</stus>

Test.java

package Test;

import java.io.File;
import java.util.List;

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

public class Test {

	public static void main(String[] args) throws DocumentException {
		//1.创建sax读取对象
		SAXReader reader=new SAXReader();
		//2.指定解析的xml源
		Document document=reader.read(new File("D:\\下载\\eclipse-java-oxygen-2-win32-x86_64\\eclipse\\workspace\\XML\\src\\Test\\Frist.xml"));
		//3。得到元素
		//得到根元素
		Element rootElement=document.getRootElement();
		//获得子元素
		//System.out.println(rootElement.element("stu").element("age").getText());
		List<Element>list=rootElement.elements();
		for(Element element:list) {
			System.out.println(element.element("name").getText());
		}
	}
}

}

XML 约束

如下的文档,属性的ID值是一样的。这在生活中是不可能出现的。并且第二个学生的姓名有好几个。一般也很少。那么怎么规定ID的值唯一,或者是元素只能出现一次,不能出现多次?甚至是规定里面只能出现具体的元素名字。

<?xml version="1.0" encoding="UTF-8"?>
		<stus>
			<stu id="10086">
				<name>张三</name>
				<age>18</age>
				<address>深圳</address>
			</stu>
			<stu id="10086">
				<name>李四</name>
				<name>李五</name>
				<name>李六</name>
				<age>28</age>
				<address>北京</address>
			</stu>
		</stus>

DTD

语法自成一派,早起就出现的。可读性比较差。

Schema

其实就是一个xml.使用xml的语法规则,xml解析器解析起来比较,是为了替代DTD。但是Schema约束文本逼DTD的内容还要多,所以目前没有真正意义上的替代DTD

推荐阅读