java 从零开始,学习笔记之基础入门<DOM解析>(三十二)

来源:互联网 发布:mount windows共享目录 编辑:程序博客网 时间:2024/05/23 01:18

DOM解析

 

DOM解析一

基础知识

TestXMLParseDemo

package com.ibm.xmldemo;

 

import java.io.File;

import java.io.IOException;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

 

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 org.xml.sax.SAXException;

 

public class TestXMLParseDemo {

   

    public static void main(String[] args) {

       try {

       //首先获取DocumentBuilder对象

       DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

       //通过DocumentBuilder对象加载需要解析的dom文件

       Document document;

           document = builder.parse(new File("D:/web/xml/one.xml"));

           //调用documentgetChildNodes()方法返回的是文件的子节点,即所有文件内容的根节点

           NodeList nl=document.getChildNodes();

           System.out.println(nl.getLength());

          

           //通过documentgetDocumentElement()方法获得根节点

           Element root=document.getDocumentElement();

           String name=root.getNodeName();

           System.out.println("----"+name);

          

           String rname=root.getAttribute("name");

           System.out.println(rname);

          

           String raddress=root.getAttribute("addr");

           System.out.println(raddress);

          

           //获得根节点的所有属性

           //在我们不知道有多少属性的情况下,通过循环

           NamedNodeMap nm=root.getAttributes();

//         System.out.println(nm.item(0).getNodeName());

//         System.out.println(nm.item(1).getNodeName());

           for(int i=0;i<nm.getLength();i++){

              Node n=nm.item(i);

//             System.out.println(n.getNodeName()+"="+n.getNodeValue());

           }

          

           //获取根节点下的子节点

           NodeList nl2=root.getChildNodes();

//         System.out.println(nl2.getLength());

           //遍历所有子节点

           for (int i = 0; i < nl2.getLength(); i++) {

              Node n2=nl2.item(i);

//             System.out.println(n2.getNodeName()+"="+n2.getNodeValue());

           }

          

           //获得所有班级

           NodeList nlist = root.getElementsByTagName("class");

           for (int i = 0; i < nlist.getLength(); i++) {

              Node c = nlist.item(i);

              //获得班级所有属性

//            NamedNodeMap nm2=c.getAttributes();

//            for (int j = 0; j < nm2.getLength(); j++) {

//                Node cn=nm2.item(j);

//                System.out.println(cn.getNodeName()+"="+cn.getNodeValue());

//                System.out.println("******************");

//            }

             

              NodeList nl3=c.getChildNodes();

              for (int j = 0; j < nl2.getLength(); j++) {

                  Node stu=nl3.item(j);

                  if(stu.getNodeName().equals("student")){

                     NamedNodeMap nm3=stu.getAttributes();

                     for (int k = 0; k < nm3.getLength(); k++) {

                         Node sn=nm3.item(k);

                         System.out.println(sn.getNodeName()+"=="+sn.getNodeValue());

                     }

                     System.out.println("***");

                  }

              }

              System.out.println("-----------");

           }

          

          

          

       } catch (SAXException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       } catch (ParserConfigurationException e) {

           e.printStackTrace();

       }

    }

 

}

 

 

 

循环进行排版

TestInfo

package com.ibm.xmldemo;

 

import java.io.File;

import java.io.IOException;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

 

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 org.xml.sax.SAXException;

 

public class TestInfo {

    public static void main(String[] args) {

       try {

           DocumentBuilder builder=DocumentBuilderFactory.newInstance().newDocumentBuilder();

           Document doc=builder.parse(new File("D:/web/xml/one.xml"));

           Element root = doc.getDocumentElement();

           //获得根节点下的所有属性

           NamedNodeMap nm=root.getAttributes();

            for (int i = 0; i < nm.getLength(); i++) {

              Node n = nm.item(i);

               System.out.println(n.getNodeName()+"=="+n.getNodeValue());

           }

           

            //根据根节点获得所有的子节点

            NodeList nl=root.getElementsByTagName("class");

            for (int i = 0; i < nl.getLength(); i++) {

              Node n2=nl.item(i);

              //获得班级所有属性

              NamedNodeMap nm2=n2.getAttributes();

              for (int j = 0; j < nm2.getLength(); j++) {

                  Node n3=nm2.item(j);

                  System.out.print(n3.getNodeName()+"=="+n3.getNodeValue()+"  ");

              }

              System.out.println();

              System.out.println("学生信息");

              //获得班级所有学生信息

              NodeList nl2=n2.getChildNodes();

              for (int j = 0; j < nl2.getLength(); j++) {

                  //获得班级中的一个节点

                  Node n4=nl2.item(j);

                  if("student".equals(n4.getNodeName())){

                     NamedNodeMap nm3=n4.getAttributes();

                     for (int k = 0; k < nm3.getLength(); k++) {

                         Node n5=nm3.item(k);

                         System.out.print(n5.getNodeName()+"=="+n5.getNodeValue()+"   ");

                     }

                     System.out.println();

                  }

              }

              System.out.println("**********班级信息*************************************");

           }

           

       } catch (SAXException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       } catch (ParserConfigurationException e) {

           e.printStackTrace();

       }

      

    }

 

}

 

 

 

Javabean解析xml

College.java

package com.ibm.bean;

 

import java.util.Map;

 

public class College {

   

    private Stringname;

    private String id;

    private Stringaddr;

    private Map<String,MyClass>map;

   

    public String getName() {

       return name;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    public String getId() {

       return id;

    }

    public void setId(String id) {

       this.id = id;

    }

    public String getAddr() {

       return addr;

    }

    publicvoid setAddr(String addr) {

       this.addr = addr;

    }

    public Map<String, MyClass> getMap() {

       return map;

    }

    publicvoid setMap(Map<String, MyClass> map) {

       this.map = map;

    }

   

   

   

 

}

 

MyClass.java

package com.ibm.bean;

 

import java.util.Map;

 

public class MyClass {

   

    private String name;

    private String code;

    private String num;

    private Map<String,Student> map;

   

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getCode() {

       return code;

    }

    public void setCode(String code) {

        this.code = code;

    }

    public String getNum() {

       returnnum;

    }

    publicvoid setNum(String num) {

       this.num = num;

    }

    public Map<String, Student> getMap() {

       return map;

    }

    public void setMap(Map<String, Student> map) {

       this.map = map;

    }

   

   

 

}

 

Student.java

package com.ibm.bean;

 

public class Student {

   

    private String name;

    private String sno;

    private String sex;

    private String age;

   

    public String getName() {

       return name;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    public String getSno() {

       returnsno;

    }

    publicvoid setSno(String sno) {

       this.sno = sno;

    }

    public String getSex() {

       return sex;

    }

    public void setSex(String sex) {

       this.sex = sex;

    }

    public String getAge() {

       return age;

    }

    public void setAge(String age) {

       this.age = age;

    }

   

   

 

}

 

XMLDom4J.java

package com.ibm.bean;

 

import java.io.File;

import java.io.IOException;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

 

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 org.xml.sax.SAXException;

 

public class XMLDom4J {

 

    /**

     * @param args

     */

    public staticvoid main(String[] args) {

      

       Map<String, MyClass> map=new HashMap<String, MyClass>();

       Map<String, Student> smap=new HashMap<String, Student>();

       File xml=new File("d:/web/xml/one.xml");

       College coll=new College();

      

       Student stu=new Student();

       try {

           //Classcl=Class.forName("com.ibm.bean.College");

           Class cl=coll.getClass();

            DocumentBuilder   db = DocumentBuilderFactory.newInstance().newDocumentBuilder();

           Document doc=db.parse(xml);

           //doc中的内容读取到coll对象中

              //首先获取到根节点  

           Element root=doc.getDocumentElement();

           NamedNodeMap nm=root.getAttributes();

           //我们并不知道文件中属性对应于bean中的哪个属性,这时可以采用反射

              //先遍历所有根节点的属性

           Map<String, College> mc1=new HashMap<String, College>();

           for (int i = 0; i < nm.getLength(); i++) {

              Node att1=nm.item(i);

              String att1name=att1.getNodeName();

              String att1value=att1.getNodeValue();

              //将属性的首字母改为大写,在前面加上"set",就是对应的set方法

              String setN="set"+att1name.substring(0,1).toUpperCase()+att1name.substring(1);

//            System.out.println(att1name+":"+setN);

             

              //将属性值传递给coll对象

              Method m = cl.getMethod(setN, String.class);

              m.invoke(coll, att1value);

           }

//         System.out.println("学校属性:***************");

          

          

           //取得college所有的子节点

           MyClass mc = new MyClass();

           NodeList n = root.getElementsByTagName("class");

           String code="";

           for (int i = 0; i < n.getLength(); i++) {

              //创建Class节点对象cla

              Node cla=n.item(i);

              //创建一个MyClass对象来装一个class标签的内容

              //反射机制

              Class mcLoder=mc.getClass();

              NamedNodeMap nm2 =cla.getAttributes();

             

              //班级

              for (int j = 0; j < nm2.getLength(); j++)

              {

                  Node att2=nm2.item(j);

                  String att2name=att2.getNodeName();

                  String att2value=att2.getNodeValue();

                 

                  if("code".equals(att2name))

                  {

                     code=att2value;

                  }

                  String setN2="set"+att2name.substring(0,1).toUpperCase()+att2name.substring(1);

//                System.out.println(att2name+":"+setN2);

                  Method mm=mcLoder.getMethod(setN2, String.class);

                  mm.invoke(mc, att2value);

              }

             

             

              //取得class子节点student属性

              Class clstu=stu.getClass();

              NodeList nds1=cla.getChildNodes();

              for (int j = 0; j < nds1.getLength(); j++) {

                  //得到对象为student子节点对象

                  Node stund2=nds1.item(j);

                  if(stund2.getNodeName().equals("student")){

                     String sno="";

                     NamedNodeMap stunnm=stund2.getAttributes();

                    

                         for (int k = 0; k < stunnm.getLength(); k++) {

                            Node stunode=stunnm.item(k);

                            String att3name=stunode.getNodeName();

                            String att3value=stunode.getNodeValue();

                           

                            if("sno".equals(stunode.getNodeName())){

                                sno=att3value;

                            }

                            String setN3="set"+att3name.substring(0, 1).toUpperCase()+att3name.substring(1);

                            Method mmm=clstu.getMethod(setN3, String.class);

//                           System.out.println(stunode.getNodeName()+":"+setN3);

                            mmm.invoke(stu, att3value);

                            System.out.print("+att3value);

                         }

                        

//                       System.out.println("学生属性:+++++++++++++");

                         smap.put(sno, stu);

                         System.out.println(sno+stu.getName());

                     }

 

              }

              //smap的信息给mc

              mc.setMap(smap);

              map.put(code, mc);

               System.out.println(code+map.get("jk01").getMap().get("110").getName());

               System.out.println(code+map.get("jk01").getMap().get("120").getName());

           }

          

//         System.out.println("班级属性:@@@@@@@@@@@@@@@@@@@@@@");

          

          

 

          

//         coll.setMap(map);

//         System.out.println("学校名:"+coll.getName());

//         System.out.println("学校地址:"+coll.getAddr());

//         MyClass my=coll.getMap().get("sp01");

//         System.out.println("班级名:"+my.getName());

//         System.out.println("班级编号:"+my.getNum());

//     Student Mystu =mc.getMap().get("110");

//      System.out.println(Mystu.getName()+"-"+Mystu.getAge()+"-"+Mystu.getSno());

//      System.out.println(Mystu.getName()+"-"+Mystu.getAge()+"-"+Mystu.getSno());

          

//         System.out.println(code+map.get("jk01").getMap().get("120").getName());

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

 

}

 

 

 

DOM解析二

TestInfo

package com.ibm.xmldemo;

 

import java.io.File;

import java.util.Iterator;

import java.util.List;

 

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

 

 

public class TestSax {

   

    public static void main(String[] args) {

       SAXReader reader = new SAXReader();

       try {

           Document doc = reader.read(new File("d:/web/xml/one.xml"));

           Element root=doc.getRootElement();

           System.out.println(root.getName());

          

           //采用迭代遍历出根节点的子节点

           Iterator<Element> it =root.elementIterator();

           while (it.hasNext()) {

              Element el = it.next();

              System.out.println(el.getName());

              Iterator<Attribute> its=el.attributeIterator();

              while (its.hasNext()) {

                  Attribute att = its.next();

                  System.out.print(att.getName()+"="+att.getValue()+"\t");

              }

              System.out.println();

              //继续循环迭代class标签下的子节点

              Iterator<Element> it2=el.elementIterator();

              while (it2.hasNext()) {

                  Element el2 = it2.next();

//                System.out.println(el2.getName());

                  Iterator<Attribute> its2=el2.attributeIterator();

                  while (its2.hasNext()) {

                     Attribute atts = its2.next();

                      System.out.print(atts.getName()+"="+atts.getValue()+"\t");

                  }

                  //换行

                  System.out.println();

              }

              //班级间的换行

              System.out.println();

           }

          

       } catch (DocumentException e) {

           e.printStackTrace();

       }

    }

 

}

 

 

1 0
原创粉丝点击