import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

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

/**
 *
 * jdom生成与解析XML文档
 *
 */
public class JdomDemo{

    Document document = new Document();

    /**
     * 利用JDom进行xml文档的写入操作
     */
    public void createXml(File file) {

        // 1.创建元素 及 设置为根元素
        Element employees = newElement("employees");
        document.setContent(employees);

        // 2.创建注释 及 设置到根元素上
        Comment commet = new Comment("thisis my comment");
        employees.addContent(commet);

        // 3.创建元素
        Element element1 = newElement("employee");

        // 3.1 设置元素的属性名及属性值
        element1.setAttribute(newAttribute("id", "0001"));

        // 3.2 创建元素的属性名及属性值
        Attribute nameAttr = newAttribute("name", "wanglp");

        // 3.3 设置元素名及文本
        Element sexEle = newElement("sex");
        sexEle.setText("m");
        // 设置到上层元素上
        element1.addContent(sexEle);

        // 设置元素
        Element ageEle = newElement("age");
        ageEle.setText("22");
        element1.addContent(ageEle);

        // 设置为根元素的子元素
        employees.addContent(element1);
        // 将元素属性设置到元素上
        element1.setAttribute(nameAttr);

        // 3.创建元素
        Element element2 = newElement("employee");

        // 3.1 设置元素的属性名及属性值
        element2.setAttribute(newAttribute("id", "0002"));

        // 3.2 创建元素的属性名及属性值
        Attribute name2Attr = newAttribute("name", "fox");

        // 3.3 设置元素名及文本
        Element sex2Ele = newElement("sex");
        sex2Ele.setText("f");
        // 设置到上层元素上
        element2.addContent(sex2Ele);

        // 设置元素
        Element age2Ele = newElement("age");
        age2Ele.setText("21");
        element2.addContent(age2Ele);

        // 设置为根元素的子元素
        employees.addContent(element2);
        // 将元素属性设置到元素上
        element2.setAttribute(name2Attr);

        Element element3 = new Element("employee");
        element3.setText("title");
        element3.addContent(newElement("name").addContent(new Element("hello")));
        employees.addContent(element3);

        // 设置xml文档输出的格式
        Format format =Format.getPrettyFormat();
        XMLOutputter out = newXMLOutputter(format);
        // 将得到的xml文档输出到文件流中
        try {
            out.output(document, newFileOutputStream(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 利用JDom进行xml文档的读取操作
     */
    public void parserXml(File file) {
        // 建立解析器
        SAXBuilder builder = new SAXBuilder();
        try {
            // 将解析器与文档关联
            document = builder.build(file);
        } catch (JDOMException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        // 读取根元素
        Element root =document.getRootElement();
        // 输出根元素的名字
        System.out.println("<" +root.getName() + ">");

        // 读取元素集合
        List<?> employeeList =root.getChildren("employee");
        for (int i = 0; i <employeeList.size(); i++) {
            Element ele = (Element) employeeList.get(i);
            // 得到元素的名字
            System.out.println("<"+ ele.getName() + ">");

            // 读取元素的属性集合
            List<?> empAttrList =ele.getAttributes();
            for (int j = 0; j <empAttrList.size(); j++) {
                Attribute attrs = (Attribute)empAttrList.get(j);
                // 将属性的名字和值 并 输出
                String name = attrs.getName();
                String value = (String)attrs.getValue();
                System.out.println(name +"=" + value);
            }
            try {
                Element sex =ele.getChild("sex");
               System.out.println("<sex>" + sex.getText());
                Element age =ele.getChild("age");
               System.out.println("<age>" + age.getText());
            } catch (NullPointerException e) {
               System.out.println(ele.getTextTrim());
                Element name =ele.getChild("name");
               System.out.println("<name>" + name.getName());

            }
            System.out.println("</employee>");
        }
       System.out.println("</employees>");
    }

    /**
     * 测试
     */
    public static void main(String[] args) {

        JdomDemo jdom = new JdomDemo();
        File file = newFile("E://jdom.xml");
        jdom.createXml(file);
        jdom.parserXml(file);
    }
}

JDOM生成、解析XML实例的更多相关文章

  1. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

  2. Python 解析XML实例(xml.sax)

    已知movies.xml <collection shelf="New Arrivals"> <movie title="Enemy Behind&qu ...

  3. DOM4J生成、解析XML实例

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...

  4. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  5. 【Android】使用Pull生成/解析XML文件

    一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...

  6. java dom4j解析xml实例(2)

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  7. java dom4j解析xml实例

    java利用dom4j解析xml 需要的jar包: dom4j官方网站在 http://www.dom4j.org/ 下载dom4j-1.6.1.zip 解开后有两个包,仅操作XML文档的话把dom4 ...

  8. java 解析 XML实例

    package com.hseact.fecp.servlet; import java.io.IOException; import javax.xml.parsers.DocumentBuilde ...

  9. DOM方式解析xml实例2

    老样子,javabean实体类: import java.io.*; public class Book implements Serializable { private int id; priva ...

随机推荐

  1. Java IO(四)

    在文件操作流中,输入输出的目标都是文件,但是有时候,我们并不需要写入文件,只是需要中转一下而已,这样就会显得很麻烦,所以我们就可以使用内存操作流.在内存操作流中,输入输出目标都是内存. 内存输出流:B ...

  2. 矩阵树Matrix-Tree定理与行列式

    简单入门一下矩阵树Matrix-Tree定理.(本篇目不涉及矩阵树相关证明) 一些定义与定理 对于一个无向图 G ,它的生成树个数等于其基尔霍夫Kirchhoff矩阵任何一个N-1阶主子式的行列式的绝 ...

  3. BZOJ4870: [Shoi2017]组合数问题

    4870: [Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ...

  4. 【NOIP2017 OFO(下)】

    ·我不知道对不对,只是不想让大米兔就这样离开.      by tkys_Austin;                    [另一只情绪化的兔子]        今年的11月12日NOIP提高组, ...

  5. hdu 1255 覆盖的面积(求覆盖至少两次以上的面积)

    了校赛,还有什么途径可以申请加入ACM校队?  覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  6. Ubuntu16 编译源码安装MXNet 可变卷积Deformable-ConvNets GPU版

    [引言]最近接手了公司的关于虫子识别的项目,使用MXNet框架开发,但是实际用的是Deformable-ConvNets. Deformable-ConvNets为微软研究研究院提出的可变卷积网络,可 ...

  7. Python中编码的详细讲解

    看这篇文章前,你应该已经知道了为什么有编码,以及编码的种类情况 ASCII 占1个字节,只支持英文 GB2312 占2个字节,支持6700+汉字 GBK GB2312的升级版,支持21000+汉字 S ...

  8. 第四次C语言作业

    (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...

  9. h5的input的required使用中遇到的问题

    form提交时隐藏input发生的错误 问题描述 在form表单提交的时候,有些input标签被隐藏,表单验证过程中会出现An invalid form control with name='' is ...

  10. 用 ConfigMap 管理配置 - 每天5分钟玩转 Docker 容器技术(159)

    Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...