XML解析与XML拼接

2015年了。

1、XML解析

这边是用的dom4j方式解析。

解析的XML如下:

<?xml version="1.0" encoding="UTF-8"?>
<DBSET>
	<R>
		<C N="TASKID">10001</C> <!-- TASKID -->
		<C N="TYPE">D</C><!-- 查询类型(D/U) -->
	</R>
	<R>
		<C N="TASKID">10002</C> <!-- TASKID -->
		<C N="TYPE">U</C><!-- 查询类型 (D/U) -->
	</R>
</DBSET>

解析XML代码如下:

	/**
	 * @category 解析传入XMl
	 * @param xmldata
	 * @return List<Map<String, String>>
	 */
	@SuppressWarnings("unchecked")
	public static List<Map<String, String>> xmlData(String xmldata) {
		List<Map<String, String>> lists = new ArrayList<Map<String, String>>();
		Document doc = null;
		Map<String, String> map = null;
		try {
			doc = DocumentHelper.parseText(xmldata);
		} catch (Exception e) {
			map = new HashMap<String, String>();
			map.put(FAIL_MEMO, "错误的xml格式数据");
			lists.add(map);
			return lists;
		}
		try {
			Element root = doc.getRootElement();
			//根元素(DBSET)迭代器
			Iterator<Element> iter = root.elementIterator();
			//解析里面XML
			while (iter.hasNext()) {
				map = new HashMap<String, String>();
				Element cns = (Element) iter.next();
				//R元素迭代器
				Iterator<Element> its = cns.elementIterator();

				while (its.hasNext()) {
					Element cn = (Element) its.next();
					//将C元素的属性名和文本值存入Map中
					map.put(cn.attribute(NAME).getValue(), cn.getText());
				}
				lists.add(map);
			}
		} catch (Exception e) {
			map.put("FAIL_MEMO", "错误的xml格式");
			lists.add(map);
		}
		return lists;
	}

最后存入List<Map<String, String>>中的值为:

[{TASKID=10001, TYPE=D}, {TASKID=10002, TYPE=U}]

2、XML拼接

采用自定义类以及对应工具类的方式,具体代码如下:(感谢tangyangbo)

自定义类:

package com.keyman.struts2.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Title: Element.java
 * @Package com.keyman.struts2.test
 * @Description: TODO XML元素类
 * @author tangyangbo
 * @date 2014-12-11 下午5:32:45
 * @version V1.0
 */
public class Element {
	private String name; // 元素名
	private String nodeText = ""; // 文本值
	private Map<String, String> property = new HashMap<String, String>(); // 属性
	private boolean isleaf = true; // 是否子节点
	private List<Element> child = new ArrayList<Element>(); // 子节点

	public Element(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

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

	public String getNodeText() {
		return nodeText;
	}

	public void setNodeText(String nodeText) {
		this.nodeText = nodeText;
	}

	public Map<String, String> getProperty() {
		return property;
	}

	public void setProperty(Map<String, String> property) {
		this.property = property;
	}

	public boolean isIsleaf() {
		return isleaf;
	}

	// 这个方法应该屏蔽
	public void setIsleaf(boolean isleaf) {
		this.isleaf = isleaf;
	}

	public List<Element> getChild() {
		return child;
	}

	public void setChild(List<Element> child) {
		this.child = child;
		if (this.isleaf && this.child.size() > 0) {
			this.isleaf = false;
		}
	}

	/**
	 * 添加属性
	 *
	 * @param key
	 * @param value
	 */
	public void addProperty(String key, String value) {
		this.property.put(key, value);
	}

	/**
	 * 添加子节点
	 *
	 * @param el
	 */
	public void addChild(Element el) {
		this.child.add(el);
		if (this.isleaf && this.child.size() > 0) {
			this.isleaf = false;
		}
	}
}

工具类:

package com.keyman.struts2.test;

import java.util.Iterator;

/**
 * @Title: XmlUtil.java
 * @Package com.keyman.struts2.test
 * @Description: TODO XMl工具类
 * @author <span><span class="comment">tangyangbo</span> </span>
 * @date 2014-12-11 下午5:34:02
 * @version V1.0
 */
public class XmlUtil {

	public static String lt = "<";
	public static String ltEnd = "</";
	public static String rt = ">";
	public static String rhtEnd = "/>";
	public static String quotes = "\"";
	public static String equal = "=";
	public static String blank = " ";

	/**
	 * @category 拼接XML各元素信息
	 * @param element
	 * @return
	 */
	public static StringBuffer elementToXml(Element element) {
		StringBuffer result = new StringBuffer();
		// 元素开始
		result.append(lt).append(element.getName());
		// 判断是否有属性
		if (element.getProperty() != null && element.getProperty().size() > 0) {
			Iterator<String> iter = element.getProperty().keySet().iterator();
			while (iter.hasNext()) {
				String key = String.valueOf(iter.next());
				String value = element.getProperty().get(key);
				result.append(blank).append(key).append(equal).append(quotes)
						.append(value).append(quotes).append(blank);
			}
		}
		result.append(rt);// 结束标记
		/*
		 * 判断是否是叶子节点 是叶子节点,添加节点内容 不是叶子节点,循环添加子节点
		 */
		if (element.isIsleaf()) {
			result.append(element.getNodeText());
		} else {
			for (Element temp : element.getChild()) {
				result.append(elementToXml(temp));
			}
		}
		// 元素结束
		result.append(ltEnd).append(element.getName()).append(rt);
		return result;
	}

	/**
	 * @category 拼接XML申明信息
	 * @param element
	 * @return
	 */
	public static String element2Xml(Element element) {

		StringBuffer body = elementToXml(element);
		StringBuffer head = new StringBuffer(
				"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
		head.append(body);
		return head.toString();
	}

}

XML拼接测试代码如下:

package com.keyman.struts2.test;

/**
 * @Title: XmlTest.java
 * @Package com.keyman.struts2.test
 * @Description: TODO xml测试类
 * @author <span><span class="comment">tangyangbo</span> </span>
 * @date 2014-12-11 下午5:36:29
 * @version V1.0
 */
public class XMLTest {
	public static void main(String[] args) {
		/**
		 * <?xml version="1.0" encoding="UTF-8"?>
		 * <DBSET>
		 * <R>
		 * <C N="FLAG">0</C><!-- 执行情况-1/0 -->
		 * <C N="RETURNMESSAGE">message</C><!-- 返回消息 -->
		 * </R>
		 * </DBSET>
		 */
		Element dbsetElement = new Element("DBSET");

		Element rElement = new Element("R");

		Element cElement1 = new Element("C");
		cElement1.addProperty("N", "FLAG");
		cElement1.setNodeText("0");

		Element cElement2 = new Element("C");
		cElement2.addProperty("N", "RETURNMESSAGE");
		cElement2.setNodeText("message");

		rElement.addChild(cElement1);
		rElement.addChild(cElement2);
		dbsetElement.addChild(rElement);

		System.out.println(XmlUtil.element2Xml(dbsetElement));
	}
}

输出代码如下:

<?xml version="1.0" encoding="UTF-8"?><DBSET><R><C N="FLAG" >0</C><C N="RETURNMESSAGE" >message</C></R></DBSET>

参考资料:http://tyb.iteye.com/blog/1792013

时间: 2024-12-14 18:12:45

XML解析与XML拼接的相关文章

[iOS] XML解析和xml转plist文件(GDataXML)

iOS对于XML的解析有系统自带的SDK--NSXMLParser,鄙人愚拙,只会用GDataXML进行解析,这里仅介绍GData的使用.(以下图为例) 1.对于一个xml文件,先读取出来 NSData *xmlData = [[NSFileManager defaultManager]contentsAtPath:[NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],@"test.x

python xml解析之 xml.etree.ElementTree

import xml.etree.ElementTree as tree import io xml = '''<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100&

XML解析

3.1 XML简单介绍 (1) XML:可扩展标记语言 a.语法 b.XML文档的三部分(声明.元素和属性) c.其它注意点(注意不能交叉包含.空行换行.XML文档只能有一个根元素等) (2) XML解析 a.XML解析的两种方式 001 SAX:从根元素开始,按顺序一个元素一个元素的往下解析,可用于解析大.小文件 002 DOM:一次性将整个XML文档加载到内存中,适合较小的文件 b.解析XML的工具 001 苹果原生NSXMLParser:使用SAX方式解析,使用简单 002 第三方框架 l

iOS -数据库网络之xml解析

XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax) 1.IOS中XML文件获取 首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: //获取xml完整路径 NSString * path=[[NSBundle mainBundle] [email protected]"xml文件名称" ofType:@"xml"]; //读取文件到内存 NSData* data=[NSData dataWithConte

Java网络编程丶数据库编程丶XML解析技术。

Java网络编程 物理层. 数据链路层. 网络层. 传输层. 会话层. 表示层. 应用层. TCP/IP分层接口包括用于协作层分别完成以下的功能: 网络接口层. 网络互联层. 传输层. 应用层. 套接字: Socket.套接字.是一种抽象层. // 创建客户端Socket向服务器发起连接请求 Socket socket = new Socket("127.0.0.1", 30001); /* 利用已建立的socket创建输入输出流,处理与服务器端的连接 */ // 向服务器写入数据 B

IOS之XML解析

IOS之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> <root> <systemConfig> <CityName>北京</CityName> <CityCode>201</CityCode> <ParentCityCode> 0</ParentCityCode> <areaCode>

iOS开发之XML解析

iOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>  

.net Json和Xml解析

引言    Json和Xml是现在跨平台传输数据的主流格式,关于它们的解析,网上资料很多,我稍作整理,写成一个小demo,方便日后使用. JSON解析     能进行json解析的类库有很多,例如JavaScriptSerializer,DataContractJsonSerializer和开源类库Newtonsoft.Json.这里使用Newtonsoft.Json作个演示. 1.定义示例的类 public class Data { public string Name { get; set;

XML解析器

一.操作XML文档概述 1.如何操作XML文档 XML文档也是数据的一种,对数据的操作也不外乎是"增删改查".也被大家称之为"CRUD" C:Create: R:Retrieve: U:Update: D:Delete 2.XML解析技术 XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML).这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式.例如DOM还在Javascrip