zoukankan      html  css  js  c++  java
  • Java实现——Dom4j读写XML文件

    1. dom4j概述

    解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP。

    最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义。



    2. dom4j的使用

    2.1 Doucment相关用法

    2.11 解析XML文件,获得Document对象

    SAXReader reader = new SAXReader();
    Document   document = reader.read(new File("input.xml"));
    2.12 解析字符串,获得Document对象

     String text = "<members></members>";
     Document document = DocumentHelper.parseText(text);
    2.13 无脑自建Document对象

    Document document = DocumentHelper.createDocument();
    Element root = document.addElement("members");// 创建根节点


    2.2 节点相关用法

    2.21 获得文档根节点

     Element rootElm = document.getRootElement();
    2.22 获得某个节点下的指定子节点

    Element memberElm = root.element("member");// "member"是节点名 root为某个节点
    2.23 获得节点下的文字

    String text = memberElm.getText();
    String text = root.elementText("name");
    2.24 遍历取得某节点下名为member的所有子节点
    List nodes = rootElm.elements("member");
    for (Iterator it = nodes.iterator(); it.hasNext();) {
        Element elm = (Element) it.next();
       // do something
    }
    2.25 遍历取得某节点下的所有子节点

     for (Iterator it = root.elementIterator();it.hasNext();){
           Element element = (Element) it.next();
           // do something
     }
    2.26 A节点下 Add/Delete B节点

    Element B = A.addElement("age");
    A.remove(B);

    2.27 在根节点下添加一个CDATA节点

    Element contentElm = root.addElement("content");
    contentElm.addCDATA("Hello");
     // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
    System.out.println("contentElm.getText() " + contentElm.getText());


    2.3 属性相关用法

    2.31 取得根节点下的某属性

    Element root=document.getRootElement();    
    Attribute attribute=root.attribute("size");// 属性名name
    2.32 取得/设置为(Set)上面该属性的文字

    String text=attribute.getText();
    2.33 遍历根节点下的所有属性

      Element root=document.getRootElement();    
                for(Iterator it=root.attributeIterator();it.hasNext();){
                     Attribute attribute = (Attribute) it.next();
                     String text=attribute.getText();
                     System.out.println(text);
                 }
    2.34 设置某个节点的属性和文字

    element.addAttribute("name", "sitinspring");
    2.35 为某节点添加和删除属性

    // 新建student.xml文件并新增内容
    Document document = DocumentHelper.createDocument();
    Element root = document.addElement("学生信息");
    Element student = root.addElement("学生");
    student.addAttribute("sid", "001");
    Attribute attribute = <span style="font-family: 微软雅黑, sans-serif;">student</span>.attribute("sid");// 属性名name
    <span style="font-family: 微软雅黑, sans-serif;">student</span><span style="font-family: 微软雅黑, sans-serif;">.remove(attribute);</span>


    2.4 文档最后写入MXL文件

    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("GBK");    // 指定XML编码        
    XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
    writer.write(document);
    writer.close();


    2.5 字符串与XML的转换

    2.51  字符串 To XML

    String text = "<members> <member>sitinspring</member> </members>";
    Document document = DocumentHelper.parseText(text);
    2.52  XML To 字符串
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File("input.xml"));            
    Element root = document.getRootElement();                
    String docXmlText = document.asXML();
    String rootXmlText= root.asXML();
    Element memberElm = root.element("member");
    String memberXmlText = memberElm.asXML();


    2.6 格式化转义字符问题请查看这篇链接文


    3. 最后一个简单的小例子,看看注释和输出结果,很容易理解。就不多解释了。

    程序连续运行两次输出结果如下:



    import java.io.File;
    import java.io.FileWriter;
    import java.util.Iterator;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    public class XML{
        public static void main(String[] args) {
            try {
                XMLWriter writer = null;// 声明写XML的对象
                SAXReader reader = new SAXReader();
    
                OutputFormat format = OutputFormat.createPrettyPrint();
                format.setEncoding("GBK");// 设置XML文件的编码格式
    
                String filePath = "d:\student.xml";//文件路径
                File file = new File(filePath);
                if (file.exists()) {
                    Document document = reader.read(file);// 读取XML文件
                    Element root = document.getRootElement();// 得到根节点
                    boolean add_new = false;
                    for (Iterator i = root.elementIterator(); i.hasNext();) {
                        Element student = (Element) i.next();
                        if (student.attributeValue("sid").equals("001")) {
                            //获取并修改学生sid=001的学生信息
                        	Element info_num = student.element("编号");
                            System.out.println("sid为001的该属性名为 - " + info_num.getName());
                            System.out.println("sid为001的该属性值为 - " + info_num.getText());
                            
                            Element info_name = student.element("姓名");
                            System.out.println("sid为001的该属性名为 - " + info_name.getName());
                            System.out.println("sid为001的该属性值为 - " + info_name.getText());
                            
                            info_name.setName("外号");
                            info_name.setText("余小二");
                            System.out.println("sid为001的同学新属性名为 - " + info_name.getName());
                            System.out.println("sid为001的同学新属性值为 - " + info_name.getText());
    
                            writer = new XMLWriter(new FileWriter(filePath), format);
                            writer.write(document);
                            writer.close();
                            add_new = true;
                            break;
                        }
                    }
                    if (add_new) {
                        // 添加一个学生信息
                        Element student = root.addElement("学生");
                        student.addAttribute("sid", "100");
                        Element sid = student.addElement("编号");
                        sid.setText("100");
                        Element name = student.addElement("姓名");
                        name.setText("老大");
                        Element sex = student.addElement("性别");
                        sex.setText("男");
                        Element age = student.addElement("年龄");
                        age.setText("40");
    
                        writer = new XMLWriter(new FileWriter(filePath), format);
                        writer.write(document);
                        writer.close();
                    }
                } else {
                    // 新建student.xml文件并新增内容
                    Document document = DocumentHelper.createDocument();
                    Element root = document.addElement("学生信息");
                    Element student = root.addElement("学生");
                    student.addAttribute("sid", "001");
                    Element id = student.addElement("编号");
                    id.setText("001");
                    Element name = student.addElement("姓名");
                    name.setText("寂寞");
                    Element age = student.addElement("年龄");
                    age.setText("18");
    
                    writer = new XMLWriter(new FileWriter(file), format);
                    writer.write(document);
                    writer.close();
                }
                System.out.println("操作结束! ");
            } catch (Exception e) {
                e.printStackTrace();
            }
    }



  • 相关阅读:
    n维向量空间W中有子空间U,V,如果dim(U)=r dim(V)=n-r U交V !={0},那么U,V的任意2组基向量的组合必定线性相关
    生成相关矩阵
    线性变换与基变换
    关于基变换
    证明 U and V={0}时 dim(U+V)=dim(U)+dim(V)
    开发框架继承窗体添加按钮并授权
    线性方程组与基尔霍夫定律
    按绑定数据设置单元格风格
    威伦TK6070iQ触摸屏的使用
    s7-200 PID控位
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461601.html
Copyright © 2011-2022 走看看