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 attributes;

private List subXmlObjects;

/**

* 根据name构造XmlObject

*

* @param name

* 生成xml时标签名,如name="html",则生成xml为

*/

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();

}

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();

}

if (xmlObject != null) {

subXmlObjects.add(xmlObject);

}

}

public List getSubXmlObjectsByName(String name) {

List xmlObjects = new ArrayList();

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 + "

if (attributes != null) {

Set> set = attributes.entrySet();

for (Entry 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 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中拼接xml方法_Java常用工具类,拼接XML格式的字符串,非常好用相关推荐

  1. java文件读写的基本类_java常用工具类(三)—— 文件读取的操作类

    定义常用的文件类型 public class FileType { /** * 文件头类型 */ public static final String XML_FILE = "text/xm ...

  2. java中的push方法_Java ArrayDeque push()方法与示例

    java中的push方法 ArrayDeque类push()方法 (ArrayDeque Class push() method) push() Method is available in java ...

  3. java中三种方法_Java文件I/O的三种方法

    Java文件I/O的三种方法 RandomAccessFile是不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(Data ...

  4. java中的排序方法_Java中8种常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...

  5. Java中继承toString方法_java中toString方法详解

    1.Object类中定义有toString方法,用于返回对象的字符串表示(一个可以表示该对象属性内容的字符串),返回的字符串形式为 "类名@hashCode值".下面看Object ...

  6. java中math的方法_Java Math所有方法

    首页 > 基础教程 > 常用类 > 常用 Number & Math类 Java Math所有方法 Math类包含完成基本数学函数所需的方法.这些方法分为三类:三角函数方法. ...

  7. java中math的方法_Java中Math类常用方法代码详解

    近期用到四舍五入想到以前整理了一点,就顺便重新整理好经常见到的一些四舍五入,后续遇到常用也会直接在这篇文章更新... public class Demo{ public static void mai ...

  8. java中string的方法_java中String类中的常用方法

    @Test public void testToString2() {  /**   * 他会调用toString方法 他调用的其实是Object类中的toString方法 引用会隐式调用toStri ...

  9. java中string的方法_java中String的常用方法

    package com.string; public class string1 { public static void main(String args[]){ //将char[]数组转换成Str ...

最新文章

  1. Go 语言编程 — 高级数据类型 — Map 集合
  2. linux rpm包解压到当前目录
  3. c语言用链表实现成绩管理系统,C语言基于单链表得学生成绩管理系统
  4. 企业网络推广——企业网络推广表示合理采集可助力网站品质提升
  5. 《Pro ASP.NET MVC 3 Framework》学习笔记之二十四【Controllers和Actions】
  6. 离职113天后,微软的“中国先生”沈向洋云受聘清华大学教授
  7. Timer源码之TaskQueue
  8. PHP5应用实例详解
  9. 电脑坏了,疑似主板故障
  10. 201521123076《java程序设计》第12周学习总结
  11. MySQL数据库增删改查的SQL语句
  12. 《Objective-C 程序设计(第4版)》图书信息
  13. Angularjs的http请求
  14. 7z文件格式及其源码的分析(三)
  15. 计算机硬件系统的主要性能指标
  16. 【Python】MySQLdb库的使用以及格式化输出字段中的值
  17. 王者荣耀微信登陆不了服务器,王者荣耀微信区怎么登陆不了 王者荣耀微信区怎么登不上...
  18. 生产用料清单-在制材料数量
  19. FPGA_PCB 设计之一3.3V-LVTTL与3.3V-LVCMOS区别
  20. dedecms采集基础篇

热门文章

  1. 一体化伺服电机如何清除当前报警
  2. ftp服务器搭建类似云盘功能代码(带注释详解代码)
  3. 电脑添加夏普(sharp)打印机 从磁盘安装驱动过程
  4. 社交电商进击旅游业,能跑出一个巨头来吗
  5. 群晖如何添加第三方源
  6. 020 智能仓储物流系统里的各种“美”
  7. 使用HTTP/HTTPS 协议,请求第三方
  8. 【Ubuntu】Ubuntu查找文件的命令
  9. Android播放器实现视频窗口实时放大缩小功能
  10. python绘制n阶科赫曲线线段_034 实例8-科赫雪花小包裹