xml操作工具类

package pushMessage.server.util;
import java.io.StringReader;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;

import xframe.codec.Base64;
import xframe.codec.Des;
import xframe.util.LogUtils;
public class XmlUtils {
	private  final static Logger log=LoggerFactory.getLogger(XmlUtils.class);
	/**
	 * 将xml格式的字符串解析成map(针对子节点中没有重复的节点名)
	 * @param xmlDoc
	 * @return
	 * @throws Exception
	 */
	public static Map parse(String xmlDoc) throws Exception
	{
		StringReader xmlString = new StringReader(xmlDoc);
		// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
		InputSource source = new InputSource(xmlString);
		// 创建一个新的SAXBuilder
		SAXBuilder saxb = new SAXBuilder();
		// 通过输入源构造一个Document
		Document doc = saxb.build(source);
		Element root = doc.getRootElement();
		// 得到根元素所有子元素的集合
		List node = root.getChildren();
		Map m=new HashMap();
		if(node.size()>0)
		{
			for(int i=0;i<node.size();i++)
			{
				Element el=(Element)node.get(i);
				m.put(el.getName(), el.getText());
			}
		}
		else
		{
			m.put(root.getName(), root.getText());
		}
		return m;
	}
	/**
	 * 将xml字符串解析成list(针对子节点重复的xml)
	 * @param xmlDoc
	 * @return
	 * @throws Exception
	 */
	public static List parseXml(String xmlDoc) throws Exception
	{
		StringReader xmlString = new StringReader(xmlDoc);
		// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
		InputSource source = new InputSource(xmlString);
		// 创建一个新的SAXBuilder
		SAXBuilder saxb = new SAXBuilder();
		// 通过输入源构造一个Document
		Document doc = saxb.build(source);
		Element root = doc.getRootElement();
		List a=root.getChildren();
		List result=new ArrayList();
		Element el=null;
		for(int i=0;i<a.size();i++){
			el=(Element) a.get(i);
			result.add(el.getText());
		}
		return result;
	}
	/**
	 * map转换成String方式的XML
	 * @param xmlMap
	 * @return
	 * @throws Exception
	 */
	public static String parseString(Map xmlMap)throws Exception{
		StringBuffer sb=new StringBuffer();
		sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
		sb.append("<realname>");
		if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_PUSHTYPE)){
			sb.append("<action>");
				sb.append(xmlMap.get("action")==null?"":xmlMap.get("action"));//验证方式
			sb.append("</action>");
		}
		sb.append("</realname>");
		return sb.toString();
	}
	/**
	 * list转xml格式的String
	 * @param xmlList 消息列表
	 * @param netbarCode 网吧编码
	 * @param cardCode 身份证号
	 * @param mac mac地址
	 * @param key 用户信息加密key
	 * @param transpondUrl 消息跳转url
	 * @return
	 * @throws Exception
	 */
	public static String parseString(List<Map> xmlList,String netbarCode,String cardCode,String mac,String key,String transpondUrl) throws Exception{
		StringBuffer sb=new StringBuffer();
		try {
			sb.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
			sb.append("<root>");
			if(xmlList.size()>0){
				for(Map xmlMap:xmlList){
					sb.append("<ad>");
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_PUSHTYPE)){
						sb.append("<pushtype>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_PUSHTYPE)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_PUSHTYPE));
						sb.append("</pushtype>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_TITLE)){
						sb.append("<title>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_TITLE)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_TITLE));
						sb.append("</title>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_CONTENT)){
						sb.append("<content>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_CONTENT)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_CONTENT));
						sb.append("</content>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_URL)){
						sb.append("<url>");
						//实际跳转url
						String url=transpondUrl+"?messageId="+xmlMap.get("c_serial_id")+"&message="+URLEncoder.encode(Base64.encode(Des.encode((netbarCode+"|"
								+cardCode+"|"+mac).getBytes(), key)),"UTF-8")+"&backUrl=";
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_URL)==null?"":url+xmlMap.get(ConstantsUtil.XML_ELEMENT_URL));
						sb.append("</url>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_DELAYTIME)){
						sb.append("<delaytime>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_DELAYTIME)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_DELAYTIME));
						sb.append("</delaytime>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_CONTROLTYPE)){
						sb.append("<controltype>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_CONTROLTYPE)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_CONTROLTYPE));
						sb.append("</controltype>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_CONTROLTIME)){
						sb.append("<controltime>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_CONTROLTIME)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_CONTROLTIME));
						sb.append("</controltime>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_WIDTH)){
						sb.append("<width>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_WIDTH)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_WIDTH));
						sb.append("</width>");
					}
					if(xmlMap.containsKey(ConstantsUtil.XML_ELEMENT_HEIGHT)){
						sb.append("<height>");
						sb.append(xmlMap.get(ConstantsUtil.XML_ELEMENT_HEIGHT)==null?"":xmlMap.get(ConstantsUtil.XML_ELEMENT_HEIGHT));
						sb.append("</height>");
					}
					sb.append("</ad>");
				}
			}
			else
				sb.append("<ad></ad>");
			sb.append("</root>");
			log.debug(sb.toString());
			return sb.toString();
		} catch (Exception e) {
			log.error(LogUtils.getExceptionTrace(e));
			return null;
		}
	}
	public static void main(String[] args) throws Exception {
//		String xml="<?xml version='1.0' encoding='utf-8'?>" +
//				"<ArrayOfString xmlns='http:\\tempuri.org/'>" +
//				"<string>2011-02-22,15:31:14,13488708904,1065712038002907,*,11233321</string>" +
//				"<string>2011-02-22,15:31:14,13488708904,1065712038002907,*,555555566982</string>" +
//				"</ArrayOfString>";
		String xml="<?xml version='1.0' encoding='utf-8'?>" +
		"<ArrayOfString xmlns='http:\\tempuri.org/'/>" ;
//		Map m=XmlUtils.parse(xml);
//		XmlUtils.parseXml(xml);
//		System.out.println(m.toString());
		String a="<?xml version='1.0' encoding='windows-1252'?>"+
"<realname><action>1</action><validate/><username>5ZSQ5bu65a6d</username><cardnumber>420704198012164298</cardnumber><cardkind>0</cardkind><photo/><mobile>13693168925</mobile><securitycode/><fingerid/><fingerjpg/></realname>";
		Map m=XmlUtils.parse(a);
		System.out.println(m.toString());

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值