1.XML解析的方式
DOM: 要求解析器将整个XML文件全部加载到内存中,生成一个Document对象
1.优点:元素和元素之间保留结构,关系,可以针对元素进行CURD操作。
2.缺点:如果XML文件过大,可能会导致内存溢出。
SAX:是一种速度更快,更加高效的解析方式。它是逐行扫描,边扫描边解析,并且以事件驱动的方式来进行具体的解析,每解析已行都会触发一个事件
1.优点:不会出现内存溢出的问题,可以处理大文件
2.缺点:只能读,不能写
解析器就是根据不同的解析方式提供具体的实现,为了方便开发人员来解析XML,有一些方便操作的类库。
dom4j : 比较简单的XML解析的类库
Jsoup :功能强大的DOM方式解析的类库,尤其 对HTML的解析更加方便
2.使用dom4j解析XML
<users>
<user id="1001" country="Country">
<id>111</id>
<name>111</name>
<password>111</password>
</user>
<user id="1002" country="Country">
<id>1112</id>
<name>1112</name>
<password>1112</password>
</user>
</users>
使用dom4j解析xml
//创建解析器对象
SAXReader saxReader = new SAXReader();
//使用解析器对象读取XML文档生成Document对象
try{
Document document = saxReader.read(Dom4jTest.class.getClassLoader().getResource("***.xml"));
//根据Document对象获取XML的元素(标签)信息
Element rootElement = document.getRootElement();
//获取根节点的名字
rootElement.getName();
//获取根节点users标签的子标签列表
List<Element> elements = rootElement.elements();
for(Element element:elements){
System.out.println("users标签的子标签的名字是:"+element.getName());
System.out.println("users标签的子标签的id属性值是:"+element.attributeValue("id"));
//获取子标签的所有子标签
List<Element> elementNodeList = element.elements();
for(Element node:elementNodeList){
System.out.println("user标签下的子标签名字是:"+node.getName());
System.out.printkn("user标签下的子标文本是:"+node.getText());
}
}
//获取user标签的第一个user标签
Element firstUserElement = rootElement.element("user");
//第一个user标签的的子标签password的文本
String password = firstUserElement.elementText("password");
}catch(DocumentException e){
e.printStackTrace();
}
Dom4j重要的API说明
org.dom4j.Document 常用方法
Element getRootElement(); //获取根节点
String attributeValue(String name); //获取指定属性名称的属性值
String elementText(String name); //获取指定名称的子标签的文本,返回子标签文本的值