J2EE 快速入门之第五章 XML解析讲解

一:什么是xml解析?

        xml解析可以简单的理解为对xml文档里面的内容进行获取。当我们把数据存入xml文件里面以后,我们就希望通过程序获得xml的内容,我们可以运用java里面的IO知识是可以完成的,不过你需要非常繁琐的操作才能完成,并且会遇到不同的问题。为了解决这些问题,提供了不同的解析方式,并提交对那个的解析器,方便人员操作xml。
 

二:xml的解析方式?


     ①:DOM解析:将文档一次性加载到内存形成树形结构,进行解析。

优点:方便对树形结构进行操作,可以增删改操作。

缺点:若文档过大,容易导致内存溢出

     ②:SAX解析:Simple Api for Xml 事件驱动的方式,边读边解析。

优点:如果文档过大,不会导致内存溢出。

缺点:不能进行增删改操作。

    ③:PULL解析:Android内置的XML解析方式,类似SAX。
 

三:常用方法及操作

  •      使用XPath获取元素:

     1.selectSingleNode() 获得单个元素
     2.selectNodes() 获得符合的元素集合

读取规则:
        /开头表示从文档元素下开始读起
        不带/则是读取当前元素的子元素
        指定属性使用 [@]  一个属性使用一个 

Element操作
asXML()查看当前对应的xml语句
getName()拿到当前的标签名
getText()拿到当前标签中的文本值(混合元素和空元素没有值)
attributeValue()获得标签中某个属性对应的值
attribute()获得当前对应的属性
attributeCount()拿到当前标签中的属性个数
attributes()拿到当前标签的属性集合
attributeIterator()拿到当前标签的属性集合迭代器
element()拿到名字符合的第一个元素
elements()拿到当前标签下的子标签集合
elementIterator()拿到子标签集合迭代器

ps:除了document之外 其他的都是节点(Node),同时也可以视为元素(Element)

四:代码演示

package com.test;

import java.io.File;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;

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

public class Test2 {
	
	public static void main(String[] args) throws Exception {
		SAXReader sr=new SAXReader();//有了一个解析器
		//d是文档对象
		Document d = sr.read(Test2.class.getResourceAsStream("student.xml"));
		
		Element root = d.getRootElement();//是一个元素  同时也是一个节点
		System.out.println(root.asXML());
		System.out.println(root.getName());
		System.out.println(root.getText());
		System.out.println(root.attributeValue("author"));
		
		List<Element> es = root.elements();//获取当前节点下的子节点集合
		for (Element e : es) {
			System.out.println(e.getName());
			System.out.println("sid:"+e.attributeValue("sid"));
			System.out.println("gender:"+e.attributeValue("gender"));
			List<Element> es2 = e.elements();//当前student元素下的子节点集合
			for (Element e2 : es2) {
				// 当前的标签名 标签值
				System.out.println("\t"+e2.getName()+"\t"+e2.getText());
			}
		}
	}

}

----------------------------------------------------config.xml文件--------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<action path="/regAction" type="test.RegAction">
		<forward name="failed" path="/reg.jsp" redirect="false" />
		<forward name="success" path="/login.jsp" redirect="true" />
	</action>
	<action path="/loginAction" type="test.LoginAction">
		<forward name="failed" path="/login.jsp" redirect="false" />
		<forward name="success" path="/main.jsp" redirect="true" />
	</action>
</config>

-----------------------------------------------config.xml文件的解析-----------------------------------------------------

package com.test;

import java.util.List;

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

public class Test5 {

	public static void main(String[] args) throws Exception {
		// 需要解析器
		SAXReader sr = new SAXReader();
		// 得到文档对象
		Document d = sr.read(Test3.class.getResourceAsStream("config.xml"));
		
		//获取所有action中的type的值
		//1.获得所有的action
		List<Element> ls = d.selectNodes("/config/action");
		//2.遍历 取属性
		for (Element e : ls) {
			System.out.println(e.attributeValue("type"));
		}
		
		//获取第二个action中的type的值
		ls.get(1).attributeValue("type");
		
		//获取第二个action的所有forward的path
		List<Element> fs = ls.get(1).selectNodes("forward");
		for (Element e : fs) {
			System.out.println(e.attributeValue("path"));
		}
		
		//获取第二个action的第二个forward的path
		fs.get(1).attributeValue("path");
		
		
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值