Java解析XML之四(JDOM篇)

来源:互联网 发布:js的同源策略是什么 编辑:程序博客网 时间:2024/06/06 08:28

问题:

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");    }}
复制代码
原创粉丝点击