构造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 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(); } } |
分类:
常用类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探