dom解析的基本思路:
1、将整个xml文件一次性读入内存
2、将整个xml看做一棵树
3、xml中的每一个标签,属性,文本都看做是树上的一个结点
4、然后可以对结点进行增删改查的操作
话不多说,上代码。
1、首先我在d:\abc中新建了一个文本文件,重命名为stus.xml,以下是文件中的内容
<?xml version = "1.0" encoding = "gbk" ?>
<stus class = "s160401a">
<stu num = "001" >
<name>张三</name>
<age>20</age>
<sex>男</sex>
</stu>
 
<stu num = "002">
<name>李四</name>
<age>21</age>
<sex>女</sex>
</stu>
 
<stu num = "003">
<name>王五</name>
<age>22</age>
<sex>男</sex>
</stu>
</stus>
在第一行是xml声明<?xml version="1.0" encoding="gbk"  ?>,version表示版本号,encoding表示编码方式,微软的记事本用的是国标的编码方式,如果要用utf-8,则要在另存为窗口中修改编码方式为utf-8。
必须且只能有一对根标签,我写的根标签是<stus></stus>。其他的就不多说了。
 2、这是一个学生类,定义了一些属性和get、set方法
<span style="font-size: 16px;">public class student {
	public static string class;
	private string name;
	private int num;
	private int age;
	private char sex;
	public string getname() {
		return name;
	}
	public void setname(string name) {
		this.name = name;
	}
	public int getnum() {
		return num;
	}
	public void setnum(int num) {
		this.num = num;
	}
	public int getage() {
		return age;
	}
	public void setage(int age) {
		this.age = age;
	}
	public char getsex() {
		return sex;
	}
	public void setsex(char sex) {
		this.sex = sex;
	}
}</span>
3、这是用dom解析的类,看这个类之前还要了解一下。
documentbuilderfactory dom解析器工厂
documentbuilder dom解析器
document 文档对象
node 结点【接口】
element 元素结点【标签结点】
attr 属性结点
text 文本结点
node 是document,element,attr,text的父接口
nodelist  结点列表
namednodemap 一个结点的所有属性
<span style="font-size: 16px;">import javax.xml.parsers.documentbuilder;
import javax.xml.parsers.documentbuilderfactory;
import org.w3c.dom.attr;
import org.w3c.dom.document;
import org.w3c.dom.element;
import org.w3c.dom.namednodemap;
import org.w3c.dom.node;
import org.w3c.dom.nodelist;
import bean.student;
public class domparser {
	public static void main(string[] args) throws exception {
		// 得到解析器工厂对象
		documentbuilderfactory factory = documentbuilderfactory.newinstance();
		// 生产一个解析器对象
		documentbuilder builder = factory.newdocumentbuilder();
		// 开始解析xml文件,得到解析的结果,是一个document对象
		// document对象叫做文档树对象
		document dom = builder.parse("d:\\abc\\stus.xml");
		// 通过document对象提取数据
		// document对象的第一个子节点是根节点[根标签]
		node root = dom.getfirstchild();
		// 获得标签的名字
		string str = root.getnodename();
		// 获得根节点的属性
		namednodemap attrs = root.getattributes();
		// 强转成attr类型 属性类
		attr attr = (attr) attrs.getnameditem("class");
		// 获得属性里的值
		string v = attr.getvalue();
		system.out.println(v);
		// 获得所有的学生-------------------------------------
		nodelist list = root.getchildnodes();
		for (int i = 0; i < list.getlength(); i++) {
			node node = list.item(i);
			// 判断是否是标签结点
			if (node instanceof element) {
				element e = (element) node;
				// 获得标签结点里属性的值
				string num = e.getattribute("num");
				system.out.println(num);
				// 输出标签中的文本
				// system.out.println(e.gettextcontent());
				// 继续获得stu的子节点
				nodelist nodelist = e.getchildnodes();
				for (int j = 0; j < nodelist.getlength(); j++) {
					node n = nodelist.item(j);
					if (n instanceof element) {
						element ele = (element) n;
						// 获得元素结点的标签名字
						string nodename = ele.getnodename();
						// 获得元素结点标签中的文本
						string value = ele.gettextcontent();
						if (nodename.equals("name")) {
							system.out.println("姓名:" + value);
						} else if (nodename.equals("age")) {
							system.out.println("年龄:" + value);
						} else if (nodename.equals("sex")) {
							system.out.println("性别:" + value);
						}
					}
				}
			}
		}
	}
}</span>
自己在其中总结了一些方法:
documentbuilderfactory类:
 public static documentbuilderfactory newinstance(); //得到解析器工厂对象
public abstract documentbuilder newdocumentbuilder(); //生产一个解析器对象
documentbuilder类:
public document parse(string uri); //解析路径为uri的xml文件,得到解析的结果是一个document对象
node类:
public node getfirstchild(); //得到document对象的第一个子结点,也就是根结点、或者叫根标签,在上面的代码中得到的是stus,看上面的第1点中的xml文件的内容。
public namednodemap getattributes();//获得结点的属性
public nodelist getchildnodes();//获得所有子结点
public string getnodename();//获得标签的名字 
public string gettextcontent() throws domexception;//获得标签结点中的文本
namednodemap类:
public node getnameditem(string name);//返回所有名字为name的结点
attr类:
public string getvalue();//获得属性里的值
nodelist类:
public node item(int index);//返回第index个结点
element类:
public string getattribute(string name);//获得标签结点里属性name的值
以上就是详解xml- jaxp技术-dom解析的详细内容。
   
 
   