DOM解析的基本思路:
1、将整个XML文件一次性读入内存
2、将整个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 num = "003">
<name>王五</name>
<age>22</age>
</stus>
在第一行是XML声明<?xml version="1.0" encoding="GBK" ?>,version表示版本号,encoding表示编码方式,微软的记事本用的是国标的编码方式,如果要用UTF-8,则要在另存为窗口中修改编码方式为UTF-8。下载
必须且只能有一对根标签,我写的根标签是<stus></stus>。其他的就不多说了。
<spanstyle="font-size:16px;">publicclassStudent{
staticStringClass;
privateStringname;
privateintnum;
intage;
charsex;
publicStringgetName(){
returnname;
}
voidsetName(Stringname){
this.name=name;
}
intgetNum(){
returnnum;
}
voidsetNum(intnum){
this.num=num;
}
intgetAge(){
returnage;
}
voidsetAge(intage){
this.age=age;
}
chargetSex(){
returnsex;
}
voidsetSex(charsex){
this.sex=sex;
}
}</span>
3、这是用DOM解析的类,看这个类之前还要了解一下。 DocumentBuilderFactory DOM解析器工厂
DocumentBuilder DOM解析器
Document 文档对象
Node 结点【接口】
Element 元素结点【标签结点】
Attr 属性结点
Text 文本结点
Node 是Document,Element,Attr,Text的父接口
NodeList 结点列表
NamedNodeMap 一个结点的所有属性
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importorg.w3c.dom.Attr;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.NamedNodeMap;
importorg.w3c.dom.Node;
importorg.w3c.dom.NodeList;
importbean.Student;
classDOMParser{
staticvoidmain(String[]args)throwsException{
//得到解析器工厂对象
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
//生产一个解析器对象
DocumentBuilderbuilder=factory.newDocumentBuilder();
//开始解析XML文件,得到解析的结果,是一个Document对象
//Document对象叫做文档树对象
Documentdom=builder.parse("D:\\ABC\\stus.xml");
//通过Document对象提取数据
//Document对象的第一个子节点是根节点[根标签]
Noderoot=dom.getFirstChild();
//获得标签的名字
Stringstr=root.getNodeName();
//获得根节点的属性
NamedNodeMapattrs=root.getAttributes();
//强转成Attr类型属性类
Attrattr=(Attr)attrs.getNamedItem("class");
//获得属性里的值
Stringv=attr.getValue();
System.out.println(v);
//获得所有的学生-------------------------------------
NodeListlist=root.getChildNodes();
for(inti=0;i<list.getLength();i++){
Nodenode=list.item(i);
//判断是否是标签结点
if(nodeinstanceofElement){
Elemente=(Element)node;
Stringnum=e.getAttribute("num");
System.out.println(num);
//System.out.println(e.getTextContent());
//继续获得stu的子节点
NodeListnodeList=e.getChildNodes();
intj=0;j<nodeList.getLength();j++){
Noden=nodeList.item(j);
if(ninstanceofElement){
Elementele=(Element)n;
//获得元素结点的标签名字
StringnodeName=ele.getNodeName();
//获得元素结点标签中的文本
Stringvalue=ele.getTextContent();
if(nodeName.equals("name")){
System.out.println("姓名:"+value);
}elseif(nodeName.equals("age")){
System.out.println("年龄:"+value);
}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类:
原文链接:https://www.f2er.com/xml/294803.html