object to xml

import java.util.ArrayList;  

import java.util.Iterator;  

import java.util.List;  

 

/**  

 * 根据该对象可以构造Xml字符串  

 *  

 *  

 */  

public class XmlObject { 

    private static String HEAD = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; 

    private String name; 

    private Object value; 

    private List<Attribute> attributes; 

    private List<XmlObject> subXmlObjects; 

 

    /**  

     * 根据name构造XmlObject 

     * @param name 生成xml时标签名,如name="html",则生成xml为<html/> 

     */  

    public XmlObject(String name) { 

        this.name = name; 

    }  

 

    /**  

     * 获得当前对象的名称 

     * @return 返回当前对象的名称 

     */  

    public final String getName() { 

        return name; 

    }  

 

    /**  

     * 设置当前对象的名称 

     * @param name 给定名称  

     */  

    public final void setName(String name) { 

        this.name = name; 

    }



/**
* 获得当前对象的值
* @return 返回当前对象的值
*/
public final Object getValue() {
return value;
}

/**
* 设置当前对象的值
* @param value 给定值
*/
public final void setValue(Object value) {
this.value = value;
}

/**
* 为当前XmlObject添加属性
* @param name 属性名
* @param value 属性值
*/
public final void setAttribute(String name, Object value) {
if (attributes == null) {
attributes = new ArrayList<Attribute>();
}
Attribute attribute = null;
for (Attribute att : attributes) {
if (name.equalsIgnoreCase(att.getName())) {
attattribute = att;
break;
}
}
if (attribute == null) {
attribute = new Attribute(name, value);
attributes.add(attribute);
} else {
attribute.setValue(value);
}
}

/**
* 根据属性名称获得当前XmlObject对象的属性值
* @param name 属性名称
* @return 属性值
*/
public final Object getAttributeValue(String name) {
return getAttributeValue(name, null);
}

/**
* 根据属性名称获得当前XmlObject对象的属性值
* @param name 属性名称
* @param defaultValue 默认值
* @return 若属性存在,则返回属性值,否则返回默认值
*/
public final Object getAttributeValue(String name, Object defaultValue) {
Attribute attribute = null;
for (Attribute att : attributes) {
if (name.equalsIgnoreCase(att.getName())) {
attattribute = att;
break;
}
}
if (attribute == null) {
return defaultValue;
} else {
return attribute.getValue();
}
}

/**
* 为当前XmlObject对象添加子XmlObject对象
* @param xmlObject 给定XmlObject对象
*/
public final void addSubXmlObject(XmlObject xmlObject) {
if (subXmlObjects == null) {
subXmlObjects = new ArrayList<XmlObject>();
}
subXmlObjects.add(xmlObject);
}

/**
* 构造当前对象的压缩XML字符串
*
* @return XML字符串
*/
public final String toCompactXml() {
return HEAD + getNoHeadXml("", "");
}

/**
* 根据格式化留白("\t")和默认的行分隔符("\t")构造当前对象的XML字符串
*
* @return XML字符串
*/
public String toFormatXml() {
return toFormatXml("\t");
}

/**
* 根据格式化留白和默认的行分隔符构("\n")造当前对象的XML字符串
*
* @param blank
* 格式化留白
* @return XML字符串
*/
protected final String toFormatXml(String blank) {
return HEAD + "\n" + getNoHeadXml(blank, "\n");
}

/**
* 根据格式化留白和行分隔符构造当前对象的无头的XML字符串
*
* @param blank
* 格式化留白
* @param split
* 行分隔符
* @return 无头的XML字符串
*/
protected final String getNoHeadXml(String blank, String split) {
return getNoHeadXml(blank, split, 0);
}

private final String getNoHeadXml(String blank, String split, int count) {
String blanks = "";
for (int i = 0; i < count; i++) {blanks += blank; }
StringBuffer sb = new StringBuffer(); sb.append(blanks + "<" + name);if (attributes != null) { Iterator<Attribute> iterator = attributes.iterator(); while (iterator.hasNext()) { Attribute attribute = iterator.next(); sb.append(" " + attribute.getName() + "=\""+ attribute.getValue() + "\""); }} if (subXmlObjects == null) {
if (value == null) { sb.append("/>" + split); } else { sb.append(">"); sb.append(value);
sb.append("</" + name + ">" + split); } } else { sb.append(">" + split); Iterator<XmlObject> iterator = subXmlObjects.iterator(); count += 1; while (iterator.hasNext()) { XmlObject xmlObject = iterator.next(); sb.append(xmlObject.getNoHeadXml(blank, split, count)); } sb.append(blanks + "</" + name + ">" + split);
} return sb.toString(); }


class Attribute {
private String name;
private Object value;

public Attribute(String name, Object value) {
this.name = name;
this.value = value;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Object getValue() {
return value;
}

public void setValue(Object value) {
this.value = value;
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值