zoukankan      html  css  js  c++  java
  • dom4j读写xml文件示例

    dom4j读写xml文件

     

    首先我们给出一段示例程序:

    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 DOM4JTest {

        
    /** *//** */
        
    /** *//** */
        
    /** *//** */
        
    /** *//**
         * DOM4J
    读写XML示例
         * 
         * 
    @param args
         * 
    @throws Exception
         */

        
    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 bl = false;
                    
    for (Iterator i = root.elementIterator("学生"); i.hasNext();) {
                        Element student = (Element) i.next();
                        
    if (student.attributeValue("sid").equals("001")) {
                            
    // 修改学生sid=001的学生信息
                            student.selectSingleNode("姓名").setText("王五");
                            student.selectSingleNode("
    年龄").setText("25");

                            writer = 
    new XMLWriter(new FileWriter(filePath), format);
                            writer.write(document);
                            writer.close();
                            bl = 
    true;
                            
    break;
                        }
                    }
                    
    if (bl) {
                        
    // 添加一个学生信息
                        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("21");

                        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();
            }

        }
    }


    执行结果应该是这样:



    循环解析节点:

    private void getAllNodes(String xml) {
            
    try {
                Document authtmp = DocumentHelper.parseText(xml);
                List<Element> list = authtmp.selectNodes("//sms/node");
                
    for (int j = 0; j < list.size(); j++) {
                    Element node = (Element) list.get(j);
                    nodeByNodes(node);
                }
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
        }

        
    private void nodeByNodes(Element node) {
            
    if (node.element("node") != null{
                String id = node.attributeValue("id");
                String name = node.attributeValue("name");
                System.out.print(id + "-------");
                System.out.println(name);
                
    for (Iterator i = node.elementIterator("node"); i.hasNext();) {
                    Element newNode = (Element) i.next();
                    nodeByNodes(newNode);
                }
            } 
    else {
                String id = node.attributeValue("id");
                String name = node.attributeValue("name");
                System.out.print(id + "-------");
                System.out.println(name);
            }
        }


    其次DOM4J的解释

    .Document对象相关

    1.读取XML文件,获得document对象.

          SAXReader reader = new SAXReader();
          Document   document = reader.read(new File("input.xml"));


    2.解析XML形式的文本,得到document对象.

          String text = "<members></members>";
          Document document = DocumentHelper.parseText(text);


    3.主动创建document对象.

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


    .节点相关

    1.获取文档的根节点.

         Element rootElm = document.getRootElement();


    2.取得某节点的单个子节点.

         Element memberElm=root.element("member");// "member"是节点名


    3.取得节点的文字

         String text=memberElm.getText();

    也可以用:

         String text=root.elementText("name");

    这个是取得根节点下的name字节点的文字.

    4.取得某节点下名为"member"的所有字节点并进行遍历.

    List nodes = rootElm.elements("member");

    for (Iterator it = nodes.iterator(); it.hasNext();) {
        Element elm = (Element) it.next();
       // do something
    }


    5.对某节点下的所有子节点进行遍历.

     for(Iterator it=root.elementIterator();it.hasNext();){
                     Element element = (Element) it.next();
                    // do something
                 }


    6.在某节点下添加子节点.

    Element ageElm = newMemberElm.addElement("age");


    7.设置节点文字.

    ageElm.setText("29");


    8.删除某节点.

    parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点


    9.添加一个CDATA节点.

             Element contentElm = infoElm.addElement("content");
             contentElm.addCDATA(diary.getContent());

                contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
                contentElm.clearContent(); //清除节点中的内容,CDATA亦可



    .属性相关.
    1.取得某节点下的某属性

                 Element root=document.getRootElement();    
                 Attribute attribute=root.attribute("size");// 属性名name


    2.取得属性的文字

                 String text=attribute.getText();

    也可以用:

    String text2=root.element("name").attributeValue("firstname");

    这个是取得根节点下name字节点的属性firstname的值.

    3.遍历某节点的所有属性

      Element root=document.getRootElement();    
                for(Iterator it=root.attributeIterator();it.hasNext();){
                     Attribute attribute = (Attribute) it.next();
                     String text=attribute.getText();
                     System.out.println(text);
                 }


    4.设置某节点的属性和文字.

    newMemberElm.addAttribute("name", "sitinspring");


    5.设置属性的文字

                 Attribute attribute=root.attribute("name");
                 attribute.setText("sitinspring");


    6.删除某属性

                 Attribute attribute=root.attribute("size");// 属性名name
                 root.remove(attribute);


    .将文档写入XML文件.
    1.文档中全为英文,不设置编码,直接写入的形式.

    XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
    writer.write(document);
    writer.close();


    2.文档中含有中文,设置编码格式写入的形式.

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


    .字符串与XML的转换
    1.将字符串转化为XML

    String text = "<members> <member>sitinspring</member> </members>";
    Document document = DocumentHelper.parseText(text);


    2.将文档或节点的XML转化为字符串.

                 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();

  • 相关阅读:
    Scrapy之下载中间件与爬虫中间件
    Scrapy之twisted模块
    Scrapy之下载中间件中的代理中间件HttpProxyMiddleware
    Scrapy之start_urls、爬虫中间件之深度,优先级以及源码流程
    Scrapy之dupefilters(去重)以及源码分析/depth
    NOI 2013 书法家
    NOI2013 快餐店
    NOI2013 树的计数
    NOI2013 UOJ122 向量内积
    NOI2015
  • 原文地址:https://www.cnblogs.com/summer520/p/2964369.html
Copyright © 2011-2022 走看看