您好,欢迎访问一九零五行业门户网

详解XML- JAXP技术-DOM解析

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解析的详细内容。
其它类似信息

推荐信息