加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML - JAXP技术 - DOM解析

发布时间:2020-12-16 08:29:40 所属栏目:百科 来源:网络整理
导读:DOM解析的基本思路: 1、将整个XML文件一次性读入内存 2、将整个XML看做一棵树 3、XML中的每一个标签,属性,文本都看做是树上的一个结点 4、然后可以对结点进行增删改查的操作 话不多说,上代码 下载 。 1、首先我在D:ABC中新建了一个文本文件,重命名为st

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。下载

    


    必须且只能有一对根标签,我写的根标签是<stus></stus>。其他的就不多说了。

  2、这是一个学生类,定义了一些属性和get、set方法

Java代码下载

  1. <spanstyle="font-size:16px;">publicclassStudent{

  2. staticStringClass;

  3. privateStringname;

  4. privateintnum;

  5. intage;

  6. charsex;

  7. publicStringgetName(){

  8. returnname;

  9. }

  10. voidsetName(Stringname){

  11. this.name=name;

  12. }

  13. intgetNum(){

  14. returnnum;

  15. }

  16. voidsetNum(intnum){

  17. this.num=num;

  18. }

  19. intgetAge(){

  20. returnage;

  21. }

  22. voidsetAge(intage){

  23. this.age=age;

  24. }

  25. chargetSex(){

  26. returnsex;

  27. }

  28. voidsetSex(charsex){

  29. this.sex=sex;

  30. }

  31. }</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: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的值

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读