Java常用工具类,拼接XML格式的字符串,非常好用

来源:互联网 发布:俄罗斯方块摆放算法 编辑:程序博客网 时间:2024/04/29 17:07
import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Set;import java.util.Map.Entry;/** * 根据该对象可以构造Xml字符串 * @author zhangpeng * */public class XmlObject {private static String HEAD = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";private String name;private Object value;private Map<String, Object> attributes;private List<XmlObject> subXmlObjects;/** * 根据name构造XmlObject *  * @param name *            生成xml时标签名,如name="html",则生成xml为<html/> */public XmlObject(String name) {this.name = name;}/** * 获得当前对象的名称 *  * @return 返回当前对象的名称 */public String getName() {return name;}/** * 设置当前对象的名称 *  * @param name *            给定名称 */public void setName(String name) {this.name = name;}/** * 获得当前对象的值 *  * @return 返回当前对象的值 */public Object getValue() {return value;}/** * 设置当前对象的值 *  * @param value *            给定值 */public void setValue(Object value) {this.value = value;}/** * 为当前XmlObject添加属性 *  * @param name *            属性名 * @param value *            属性值 */public void addAttribute(String name, Object value) {if (attributes == null) {attributes = new LinkedHashMap<String, Object>();}if (name != null && !name.trim().equals("") && !name.equals(this.name)) {attributes.put(name, value);}}/** * 为当前XmlObject添加属性 *  * @param name *            属性名 * @param value *            属性值 */public void setAttribute(String name, Object value) {addAttribute(name, value);}/** * 根据属性名称获得当前XmlObject对象的属性值 *  * @param name *            属性名称 * @return 属性值 */public Object getAttributeValue(String name) {return getAttributeValue(name, null);}/** * 根据属性名称获得当前XmlObject对象的属性值 *  * @param name *            属性名称 * @param defaultValue *            默认值 * @return 若属性存在,则返回属性值,否则返回默认值 */public Object getAttributeValue(String name, Object defaultValue) {Object value = attributes.get(name);return value == null ? defaultValue : value;}/** * 为当前XmlObject对象添加子XmlObject对象 *  * @param xmlObject *            给定XmlObject对象 */public void addSubXmlObject(XmlObject xmlObject) {if (subXmlObjects == null) {subXmlObjects = new ArrayList<XmlObject>();}if (xmlObject != null) {subXmlObjects.add(xmlObject);}}public List<XmlObject> getSubXmlObjectsByName(String name) {List<XmlObject> xmlObjects = new ArrayList<XmlObject>();for (XmlObject temp: subXmlObjects) {if (temp.getName().equals(name)) {xmlObjects.add(temp);}}return xmlObjects;}public XmlObject getUniqueSubXmlObjectByName(String name) {for (XmlObject temp: subXmlObjects) {if (temp.getName().equals(name)) {return temp;}}return null;}/** * 构造当前对象的压缩XML字符串 *  * @return XML字符串 */public String toCompactXml() {return HEAD + getNoHeadXml("", "");}/** * 根据格式化留白("\t")和默认的行分隔符("\t")构造当前对象的XML字符串 *  * @return XML字符串 */public String toFormatXml() {return HEAD + getNoHeadXml("\t", "\n");}/** * 根据格式化留白和默认的行分隔符构("\n")造当前对象的XML字符串 *  * @param blank *            格式化留白 * @return XML字符串 */public String toFormatXml(String blank) {return HEAD + getNoHeadXml(blank, "\n");}/** * 根据格式化留白和行分隔符构造当前对象的无头的XML字符串 *  * @param blank *            格式化留白 * @param split *            行分隔符 * @return 无头的XML字符串 */private String getNoHeadXml(String blank, String split) {return getNoHeadXml(blank, split, 0);}private 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(count == 0 ? split : "");sb.append(blanks + "<" + name);if (attributes != null) {Set<Entry<String, Object>> set = attributes.entrySet();for (Entry<String, Object> entry : set) {String tempName = entry.getKey();Object tempValue = entry.getValue();if (tempName != null && tempValue != null) {sb.append(" " + tempName + "=\"" + tempValue + "\"");}}}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();}}

原创粉丝点击