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