java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作

来源:互联网 发布:dhcp服务器端口 编辑:程序博客网 时间:2024/05/19 07:09

全栈工程师开发手册 (作者:栾鹏)

java教程全解

java使用org.w3c.dom(java dom)解析XML文档,创建、增删查改,保存,读取,遍历元素等操作

在保存文件时需要载入crimson.jar库,下载

测试代码

import java.io.*; //Java基础包,包含各种IO操作 import java.util.*; //Java基础包,包含各种标准数据结构操作 import javax.xml.parsers.*; //XML解析器接口 import org.w3c.dom.*; //XML的DOM实现 import org.apache.crimson.tree.XmlDocument; //写XML文件要用到    public static void main(String[] args) {      Document doc=creat_xml();      save_xml(doc, "student.xml");      read_xml("student.xml");  }

创建xml文档及元素

//创建一个Document,用于存储成xml  public static Document creat_xml()  {        //为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        DocumentBuilder db = null;        try {            db = dbf.newDocumentBuilder();            Document doc = db.newDocument();            //下面是建立XML文档内容的过程,先建立根元素            Element root = doc.createElement("花名册");            //根元素添加到文档             doc.appendChild(root);            //建立子元素            for (int i = 0; i < 10; i++) {                //建立一级子元素,添加到根元素                 Element student = doc.createElement("学生");                //为一级子元素设置属性                student.setAttribute("性别", "男");                root.appendChild(student);                //为一级子元素添加文本                Text tName = doc.createTextNode("学生"+i);                student.appendChild(tName);            }            return doc;        } catch (Exception err) {            err.printStackTrace();            System.exit(1);        }        return null;  }

将文档document保存成xml文件

//将Document保存成xml文件  public static void save_xml(org.w3c.dom.Document doc,String filepath)   {      try {            //把XML文档输出到指定的文件            org.apache.crimson.tree.XmlDocument xmlDoc = (org.apache.crimson.tree.XmlDocument)doc;            FileOutputStream outStream = new FileOutputStream(filepath);            OutputStreamWriter outWriter = new OutputStreamWriter(outStream);            xmlDoc.write(outWriter, "GB2312");            outWriter.close();            outStream.close();        } catch (Exception e) {            e.printStackTrace();        }  }

读取遍历xml文件

 public static void read_xml(String filepath)   {    try {      //创建解析工厂      DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();      //指定DocumentBuilder      DocumentBuilder builder = dbfactory.newDocumentBuilder();      //从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了      Document doc = builder.parse(new File(filepath));      //得到Document的根      Element root = doc.getDocumentElement();      System.out.println("根节点标记名:" + root.getTagName());      System.out.println("*****下面遍历XML元素*****");      //获得一级子元素      NodeList list = root.getElementsByTagName("学生");      //遍历一级子元素      for (int i=0; i < list.getLength() ; i++) {        //获得一级子元素        Element element = (Element)list.item(i);        //获得性别属性        String sex = element.getAttribute("性别");        //获得元素的值        String name = element.getFirstChild().getNodeValue();        System.out.println("性别:" + sex + "  " +"名称:" + name);      }    } catch (Exception e) {      e.printStackTrace();    }  }