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 num = "003"> <name>王五</name> <age>22</age> </stus> 在第一行是XML声明<?xml version="1.0" encoding="GBK" ?>,version表示版本号,encoding表示编码方式,微软的记事本用的是国标的编码方式,如果要用UTF-8,则要在另存为窗口中修改编码方式为UTF-8。下载 2、这是一个学生类,定义了一些属性和get、set方法
Java代码下载
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:ABCstus.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类: public String getAttribute(String name);//获得标签结点里属性name的值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |