zoukankan      html  css  js  c++  java
  • 通过Dom4j读写XML文档

    [原]通过Dom4j读写XML文档


    package com.yy.xml.dom4j;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Iterator;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    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 User {
    private String xmlDocName = "users.xml";

    public User() {
    super();
    // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    User user = new User();
    //user.newXML();
    user.readXML();
    }

    public void newXML(){
    /**
     *  users.xml
     */
    Document doc = DocumentHelper.createDocument(); //users.xml


    /**
     * 根元素 users
     */
    Element users = doc.addElement("users"; //根元素 users
    doc.setRootElement(users);
    users.addComment("the xml document about some login system information of users";


    /**
     * 根元素 users 下的子元素 user
     */
    Element user = users.addElement("user"; // 新增 users 的一个子元素 user
    user.addAttribute("id","1"; //增加user的一个属性,并设置此属性值
    Element username = user.addElement("username"; // 新增 user 元素的子元素 username
    username.setText("yy"; //设置 username 的值
    Element password = user.addElement("password"; // 新增 user 元素的子元素 password
    password.setText("12345678"; //设置 password 的值

    Element user2 = user.createCopy(); //通过对已有元素的拷贝,产生同一元素的不同实体
    user2.attribute("id".setValue("2";
    user2.element("username".setText("liyun";
    user2.element("password".setText("87654321";
    users.add(user2);  //根元素增加已有的子元素


    /**
     * 通过 org.dom4j.io.OutputFormat 来设置XML文档输出格式
     */
    OutputFormat format = OutputFormat.createPrettyPrint(); //设置XML文档输出格式
    format.setEncoding("GB2312"; //设置XML文档的编码类型
    format.setSuppressDeclaration(true);
    format.setIndent(true); //设置是否缩进
    format.setIndent("   "; //以空格方式实现缩进
    format.setNewlines(true); //设置是否换行


    /**
     *  通过 org.dom4j.io.XMLWriter 创建XML文档(写)
     */
    try {
    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(new File(xmlDocName)),format);
    xmlWriter.write(users);
    xmlWriter.close();
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }


    public void readXML(){
    SAXReader saxReader =  new SAXReader();
    try {
    /**
     *  先通过 org.dom4j.io.SAXReader 读入整份XML文档
     */
    Document usersXMLDoc = saxReader.read(new FileInputStream(new File(xmlDocName)));


    /**
     *  取得XML文档的各元素及其值
     */
    Element users = usersXMLDoc.getRootElement(); //取得XML文档的根元素
    Iterator users_subElements = users.elementIterator(); //以Iterator集合得到根元素下的所有子元素
    //Iterator users_subElements = users.elementIterator("user"; //可以指定所要得到的子元素的名称
    while(users_subElements.hasNext()){
      Element user = (Element)users_subElements.next();
      List user_subElements = user.elements(); //以List集合得到 user 下的所有子元素
      //List user_subElements = user.elements("username"; //可以指定名称取得所要取的元素
      for(int i=0;i<user_subElements.size();i++){
      Element ele = (Element)user_subElements.get(i);
      System.out.print(ele.getName()+" : "+ele.getText()+"   ";
      }
      System.out.println();
    }
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    }
  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/kentyshang/p/621398.html
Copyright © 2011-2022 走看看