zoukankan      html  css  js  c++  java
  • JDOM入门实例:读取与创建xml文档

    1.入门实例一:xml文件的读取与修改

    xml文件:library.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    <book email="abc@163.com">
    <name>jdom</name>
    <price>60.0</price>
    </book>
    </books>

    代码实例:JDomParse.java

    package edu.sjtu.erplab.jdom;

    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;

    //下面是引用到JDOM中的类
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;

    public class JDomParse {
    public JDomParse() {
    //定义xml文件路径
    String xmlpath = "D:\\Documents\\workspace\\JAVAStudy\\src\\edu\\sjtu\\erplab\\jdom\\library.xml";
    SAXBuilder builder = new SAXBuilder(false);
    try {
    Document doc = builder.build(xmlpath);
    // 得到根元素
    Element books = doc.getRootElement();
    // 得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中
    List booklist = books.getChildren("book");
    /**
    * 轮循List集合,方法1:
    */
    for (Iterator iter = booklist.iterator(); iter.hasNext();) {
    Element book = (Element) iter.next();
    String email = book.getAttributeValue("email");// 获取email元素的值
    System.out.println(email);
    String name = book.getChildTextTrim("name");
    System.out.println(name);
    // 修改name元素的值,注意的是,必须确定book元素的名为“name”的子元素只有一个。
    book.getChild("name").setText("edit-jdom");
    }

    /**
    * 轮循List集合,方法2:
    */
    // for (int i = 0; i < booklist.size(); i++) {
    // Element book = (Element) booklist.get(i);
    // String email = book.getAttributeValue("email");// 获取email元素的值
    // System.out.println(email);
    // String name = book.getChildTextTrim("name");
    // System.out.println(name);
    //// 修改name元素的值,注意的是,必须确定book元素的名为“name”的子元素只有一个。
    // book.getChild("name").setText("edit-jdom");
    // }

    // 使用XMLOutputter类,把已经修改了的Document保存进XML文档中。
    XMLOutputter outputter = new XMLOutputter();
    outputter.output(doc, new FileOutputStream(xmlpath));
    } catch (JDOMException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    public static void main(String[] args) {
    new JDomParse();
    }
    }

    输出结果:

    abc@163.com
    jdom

    这个时候在去查看library.xml会发现它已经变为:

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    <book email="abc@163.com">
    <name>edit-jdom</name>
    <price>60.0</price>
    </book>
    </books>

    2.入门实例二:XML文件的创建与读取

    代码实例:JdomRWXML.java

    package edu.sjtu.erplab.jdom;

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.List;

    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;

    public class JdomRWXML {

    /**
    * 创建xml文档
    *
    @throws IOException
    *
    @throws JDOMException
    */
    public void BuildXMLDoc() throws IOException, JDOMException {
    // 创建根节点 list;
    Element root = new Element("list");
    // 将根节点添加到文档中;
    Document Doc = new Document(root);
    // 此处 for 循环可替换成 遍历 数据库表的结果集操作;
    for (int i = 0; i < 5; i++) {
    // 创建新节点 company;
    Element elements = new Element("company");
    // 给 company 节点添加属性 id;
    elements.setAttribute("id", "" + i);
    // 给 company 节点添加子节点并赋值
    elements.addContent(new Element("company_name").setText("name" + i));
    elements.addContent(new Element("company_email").setText("name" + i + "@163.com"));
    // 给父节点list添加company子节点;
    root.addContent(elements);
    }
    XMLOutputter XMLOut = new XMLOutputter();
    // 输出company_list.xml文件;
    XMLOut.output(Doc, new FileOutputStream("company_list.xml"));
    }

    /**
    * 读取xml文档
    *
    @throws IOException
    *
    @throws JDOMException
    */
    public void ReadXMLDoc() throws IOException, JDOMException {
    SAXBuilder sb = new SAXBuilder();// 建立构造器
    Document doc = sb.build(new FileInputStream("company_list.xml"));// 读入指定文件
    Element root = doc.getRootElement();// 获得根节点
    List<?> list = root.getChildren();// 将根节点下的所有子节点放入List中
    for (int i = 0; i < list.size(); i++) {
    System.out.println("---------------------------");
    Element item = (Element) list.get(i);// 取得节点实例
    String id = item.getAttribute("id").getValue();// 取得属性值
    System.out.println("id-->" + id);

    Element sub1 = item.getChild("company_name");// 取得当前节点的字节点
    String company_name = sub1.getText();// 取得当前节点的值
    System.out.println("company_name-->" + company_name);

    Element sub2 = item.getChild("company_email");
    String company_email = sub2.getText();
    System.out.println("company_email-->" + company_email);
    }
    }

    /**
    *
    @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
    JdomRWXML jdomRWXML = new JdomRWXML();

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

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

    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    }

    输出结果:

    --------BuildXMLDoc----------
    --------ReadXMLDoc----------
    ---------------------------
    id-->0
    company_name-->name0
    company_email-->name0@163.com
    ---------------------------
    id-->1
    company_name-->name1
    company_email-->name1@163.com
    ---------------------------
    id-->2
    company_name-->name2
    company_email-->name2@163.com
    ---------------------------
    id-->3
    company_name-->name3
    company_email-->name3@163.com
    ---------------------------
    id-->4
    company_name-->name4
    company_email-->name4@163.com

    然后我们在项目根目录下会发现多了一个company_list.xml文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <list>
    <company id="0">
    <company_name>name0</company_name>
    <company_email>name0@163.com</company_email>
    </company>
    <company id="1">
    <company_name>name1</company_name>
    <company_email>name1@163.com</company_email>
    </company>
    <company id="2">
    <company_name>name2</company_name>
    <company_email>name2@163.com</company_email>
    </company>
    <company id="3">
    <company_name>name3</company_name>
    <company_email>name3@163.com</company_email>
    </company>
    <company id="4">
    <company_name>name4</company_name>
    <company_email>name4@163.com</company_email>
    </company>
    </list>







  • 相关阅读:
    《编程人生》的书评
    目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
    知识思考
    自我介绍
    使用my exclipse对数据库进行操作(3)
    猜数字简洁版
    SQL语句
    使用my exclipse对数据库进行操作(1)
    使用my exclipse对数据库进行操作(2)
    建筑平面图, 建筑设计图, 家具摆放图, 制作, 开发, 软件, VC++, 源代码组件库
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2361820.html
Copyright © 2011-2022 走看看