java jdom 类_java使用JDOM 实现的 XMLProperties 类

package javaxml3;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.IOException;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.Reader;

import java.io.Writer;

import java.util.Enumeration;

import java.util.Iterator;

import java.util.List;

import java.util.Properties;

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;

public class XMLProperties extends Properties {

public void load(Reader reader)

throws IOException {

try {

// Load XML into JDOM Document

SAXBuilder builder = new SAXBuilder();

Document doc = builder.build(reader);

// Turn into properties objects

loadFromElements(doc.getRootElement().getChildren(),

new StringBuffer(""));

} catch (JDOMException e) {

throw new IOException(e.getMessage());

}

}

private void loadFromElements(List elements, StringBuffer baseName) {

// Iterate through each element

for (Iterator i = elements.iterator(); i.hasNext(); ) {

Element current = (Element)i.next();

String name = current.getName();

String text = current.getTextNormalize();

// Don't add "." if no baseName

if (baseName.length() > 0) {

baseName.append(".");

}

baseName.append(name);

// See if we have an element value

if ((text == null) || (text.equals(""))) {

// If no text, recurse on children

loadFromElements(current.getChildren(),

baseName);

} else {

// If text, this is a property

setProperty(baseName.toString(),

text);

}

// On unwind from recursion, remove last name

if (baseName.length() == name.length()) {

baseName.setLength(0);

} else {

baseName.setLength(baseName.length() -

(name.length() + 1));

}

}

}

public void load(InputStream inputStream) throws IOException {

load(new InputStreamReader(inputStream));

}

public void load(File xmlDocument) throws IOException {

load(new FileReader(xmlDocument));

}

public void save(OutputStream out, String header) {

try {

store(out, header);

} catch (IOException ignored) {

// Deprecated version doesn't pass errors

}

}

public void store(Writer writer, String header) throws IOException {

// Create a new JDOM Document with a root element "properties"

Document doc = new Document();

Element root = new Element("properties");

doc.setRootElement(root);

// Add in header information

Comment comment = new Comment(header);

doc.getContent().add(0, comment);

// Get the property names

Enumeration propertyNames = propertyNames();

while (propertyNames.hasMoreElements()) {

String propertyName = (String) propertyNames.nextElement();

String propertyValue = getProperty(propertyName);

createXMLRepresentation(root, propertyName, propertyValue);

}

// Output document to supplied filename

XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());

outputter.output(doc, writer);

}

private void createXMLRepresentation(Element root, String propertyName,

String propertyValue) {

int split;

String name = propertyName;

Element current = root;

Element test = null;

while ((split = name.indexOf(".")) != -1) {

String subName = name.substring(0, split);

name = name.substring(split + 1);

// Check for existing element

if ((test = current.getChild(subName)) == null) {

Element subElement = new Element(subName);

current.addContent(subElement);

current = subElement;

} else {

current = test;

}

}

// When out of loop, what's left is the final element's name

Element last = new Element(name);

last.setText(propertyValue);

/** Uncomment this for Attribute usage */

/*

* last.setAttribute("value", propertyValue);

*/

current.addContent(last);

}

public void store(OutputStream out, String header) throws IOException {

store(new OutputStreamWriter(out), header);

}

public void store(File xmlDocument, String header) throws IOException {

store(new FileWriter(xmlDocument), header);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、JDOM 简介 JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。 JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。 在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。 JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter开发出来,以弥补DOM及SAX在实际应用当中的不足之处。 这些不足之处主要在于SAX没有文档修改、随机访问以及输出的功能,而对于DOM来说,JAVA程序员在使用时来用起来总觉得不太方便。 DOM的缺点主要是来自于由于Dom是一个接口定义语言(IDL),它的任务是在不同语言实现中的一个最低的通用标准,并不是为JAVA特别设计的。JDOM的最新版本为JDOM Beta 9。最近JDOM被收录到JSR-102内,这标志着JDOM成为了JAVA平台组成的一部分。 二、JDOM 包概览 JDOM是由以下几个包组成的 org.jdom 包含了所有的xml文档要素的java org.jdom.adapters 包含了与dom适配的java org.jdom.filter 包含了xml文档的过滤器 org.jdom.input 包含了读取xml文档的 org.jdom.output 包含了写入xml文档的 org.jdom.transform 包含了将jdom xml文档接口换为其他xml文档接口 org.jdom.xpath 包含了对xml文档xpath操作的三、JDOM 说明 1、org.JDOM这个包里的是你J解析xml文件后所要用到的所有数据型。 Attribute CDATA Coment DocType Document Element EntityRef Namespace ProscessingInstruction Text 2、org.JDOM.transform在涉及xslt格式换时应使用下面的2个 JDOMSource JDOMResult org.JDOM.input 3、输入,一般用于文档的创建工作 SAXBuilder DOMBuilder ResultSetBuilder org.JDOM.output 4、输出,用于文档换输出 XMLOutputter SAXOutputter DomOutputter JTreeOutputter 使用前注意事项: .........
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值