Java解析XML之四(JDOM篇)

问题:

Java中用JDOM解析XML,具体包括读写。

 * 参考 http://www.jdom.org/,需要下载最新包jdom-2.0.4.jar
 * 下载包中没有API文档,需要参考http://www.jdom.org/docs/apidocs/index.html
 * 目标:我们希望提供一个解决方案,在Java中使用XML就像Java本身那么简单。
 * 它形如Java,它使用Java集合,它提供完全自然的API接口给Java开发人员, 它降低了使用XML的门槛。
 * 相对DOM与SAX,它不是一个抽象层或增强这些API。相反,它提供了一个强大的,轻量的阅读和写作的复杂性和内存消耗的方案。

解决:

复制代码
package com.clzhang.sample.xml;

import java.io.*;
import java.util.*;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

/**
 * 参考 http://www.jdom.org/,需要下载最新包jdom-2.0.4.jar
 * 下载包中没有API文档,需要参考http://www.jdom.org/docs/apidocs/index.html
 * 目标:我们希望提供一个解决方案,在Java中使用XML就像Java本身那么简单。
 * 它形如Java,它使用Java集合,它提供完全自然的API接口给Java开发人员, 它降低了使用XML的门槛。
 * 相对DOM与SAX,它不是一个抽象层或增强这些API。相反,它提供了一个强大的,轻量的阅读和写作的复杂性和内存消耗的方案。
 */
public class JDOMTest {
    // 读取文件测试(其输入是writeXMLFile的输出)
    public void parseByJDOM(String file) throws Exception {
        SAXBuilder sb = new SAXBuilder();
        Document doc = sb.build(new File(file));
        Element root = doc.getRootElement();
        List<Element> elements = root.getChildren();
        for (Element element : elements) {
            String id = element.getAttribute("id").getValue();
            System.out.println(element.getName() + "\tid=" + id);
            List<Element> children = element.getChildren();
            for (Element child : children) {
                String name = child.getAttribute("name").getValue();
                String value = child.getText();
                System.out.println("\t" + child.getName() + "\t" + name + "=" + value);
            }
        }
    }

    // 写入文件测试
    public void writeXMLFile(String filename) throws Exception {
        // 文档
        Document doc = new Document();

        // 根节点
        Element root = new Element("add");
        doc.setRootElement(root);

        // 子节点一
        Element element = new Element("doc");
        element.setAttribute("id", "1");
        Element name = new Element("field");
        name.setAttribute("name", "title");
        name.setText("北京欢迎您");
        Element content = new Element("field");
        content.setAttribute("name", "content");
        content.setText("北京真的欢迎您");
        element.addContent(name);
        element.addContent(content);
        root.addContent(element);

        // 子节点二
        element = new Element("doc").setAttribute("id", "2");
        name = new Element("field").setAttribute("name", "title");
        name.setText("上海也欢迎您");
        content = new Element("field").setAttribute("name", "content");
        content.setText("上海真的也欢迎您");
        element.addContent(name);
        element.addContent(content);
        root.addContent(element);

        // 输出到文件,输出流及格式都设置为UTF-8
        FileOutputStream fos = new FileOutputStream(filename);
        OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
        Format format = Format.getPrettyFormat();
        format.setEncoding("UTF-8");

        XMLOutputter output = new XMLOutputter();
        output.setFormat(format);
        output.output(doc, osw);
        osw.close();
        fos.close();
    }

    public static void main(String[] args) throws Exception {
        JDOMTest ins = new JDOMTest();
        ins.writeXMLFile("bbs.xml");
        ins.parseByJDOM("bbs.xml");
    }
}
复制代码
发布了430 篇原创文章 · 获赞 415 · 访问量 925万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览