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

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 liupengchao
 * @version 1.0
 * @date 2012-06-18
 */	
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();
		}
}

 

你可能感兴趣的:(java)