解析具体xml获取节点的属性和标签的名称和内容

因为业务需求需要判断节点中response和zappsettlement中success的值为true才能进行下一步操作:主要是针对某个具体的xml进行解析:

<response id="d5bdf222-812a-4686-bb57-05f063dc5e2a" name="chunaServ" Success="true" inTime="2018-04-02 16:18:08 596" analysisTime="2" processTime"18" provider="10.137.103.11">
<zappsettlement chdrcoy="1" chdrnum="11292836" batctrcde="T642" validflag="2" Success="true"><validflag>2</validflag><acctyear>2014</acctyear><acctmonth>2</acctmonth></zappsettlement></response>
<response id="d5bdf222-812a-4686-bb57-05f063dc5e2a" name="chunaServ" Success="true" inTime="2018-04-02 16:18:08 596"
    analysisTime="2" processTime"18" provider="10.137.103.11"><zappsettlement chdrcoy="1" chdrnum="11292836"
batctrcde="T642" validflag="2" Success="true">
<validflag>2</validflag>
<acctyear>2014</acctyear>
<acctmonth>2</acctmonth>
</zappsettlement></response>        
工具类为:

package com.taikang.util;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;



/**
 * 解析Xml
 * 
 * @author itw_zhanghui01
 *
 */
public class XmlAnaly {
	private static Map<String, String> map;

	
	public static Map<String, String> domjxml(String paramstr) throws Exception {
		map =  new HashMap<String, String>();
		try {
            // 将xml格式字符串转化为DOM对象
            org.dom4j.Document document = DocumentHelper.parseText(paramstr);
            // 获取根结点对象
            Element rootElement = document.getRootElement();
            Attribute rootattr = rootElement.attribute("Success");
            map.put("rootSuccess", rootattr.getValue());
            // 循环根节点,获取其子节点
            for (Iterator iter = rootElement.elementIterator(); iter.hasNext();) {
                Element element = (Element) iter.next(); // 获取标签对象
                // 获取该标签对象的属性
                Attribute attr = element.attribute("Success");
                if (null != attr) {
                    String attrVal = attr.getValue();
                    String attrName = attr.getName();
                    map.put("zappSuccess", attrVal);
                }
                // 循环第一层节点,获取其子节点
                for (Iterator iterInner = element.elementIterator(); iterInner
                        .hasNext();) {
                    // 获取标签对象
                    Element elementOption = (Element) iterInner.next();
                    // 获取该标签对象的名称
                    String tagName = elementOption.getName();
                    // 获取该标签对象的内容
                    String tagContent = elementOption.getTextTrim();
                    // 输出内容
                    map.put(tagName, tagContent);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
		return map;
	}
}

完全的xml解析工具:

package com.taikang.util;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;



/**
 * 解析Xml
 * 
 * @author itw_zhanghui01
 *
 */
public class XmlAnaly {
	private static Map<String, String> map;

	public static Map<String, String> execute(String paramstr) throws Exception {
		map =  new HashMap<String, String>();
		// 创建xml的Document对象
		Document document = DocumentHelper.parseText(paramstr);
		// 遍历节点的所有属性
		Element root = document.getRootElement();
		getNodes(root);
		return map;
	}

	/**
	 * 从指定节点开始,递归遍历所有子节点
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void getNodes(Element node) {
		
		String key = "";
		String val = "";
		// 获取当前节点的属性
		List<Attribute> listAttr = node.attributes();
		// 递归遍历当前节点所有子节点
		List<Element> listElement = node.elements();
		for (Element e : listElement) {
			String attrValue = "";
			if(e.attributes().size() > 0){
				Attribute attr = (Attribute) e.attributes().get(0);
				attrValue = attr.getValue();
			}
			
			if (e.getTextTrim() != "" && e.getTextTrim() != null) {
				if (attrValue != "" && attrValue != null) {
					key = e.getName()+"_"+attrValue;
				} else {
					key = e.getName();
				}
				val = e.getTextTrim();
			}
			map.put(key, val);
			getNodes(e);// 递归
		}
	}

	// 用于判断是否有子节点,若有就将子节点也进行拼接,若无则返回""
	public static String checkChildEle(Element element) throws DocumentException {
		String json = "";
		List<Element> list = new ArrayList<Element>();
		list = element.elements();
		if (list.size() > 0) {
			for (Element ele : list) {
				List<Attribute> listAttr = ele.attributes();
				String attrvalue = "";
				if(listAttr.size()>0){
					attrvalue = listAttr.get(0).getValue();
					System.out.println("12####"+attrvalue);
				}
				
				json += "\""+ele.getName().trim()+"_"+attrvalue + "\""+":" + "\""+ele.getText().trim() + "\""+"," + "\n"
						+ checkChildEle(ele);
			}
		}
		return json;
	}

	// 这个方法是将xml字符串转成Json
	public static String xmlChangeJson(String XML) throws DocumentException {
		if(XML.indexOf("<!DOCTYPE")>=0){
			XML = XML.replace(XML.substring(XML.indexOf("<!DOCTYPE"), XML.indexOf("dtd\">")+5), "");
		}
		Document document = DocumentHelper.parseText(XML);
		Element root = document.getRootElement();
		Iterator it = root.elementIterator();
		String json = "{";
		while (it.hasNext()) {
			Element element = (Element) it.next();
			String j = checkChildEle(element);
			
			if (j == "") {
				json += "\""+element.getName() .trim()+"\""+":"+ "\""+element.getText().trim() + "\""
						+ ",";
			} else {
				json += j;
			}

		}
		json = json.substring(0, json.lastIndexOf(","));
		json += "}";
		return json;
	}

	// 这个方法是将xml文件转成Json 
	public static String xmlChangeJson(File XML) throws DocumentException {
		SAXReader reader = new SAXReader();
		Document document = reader.read(XML);
		Element root = document.getRootElement();
		Iterator it = root.elementIterator();
		String json = "{";
		while (it.hasNext()) {
			Element element = (Element) it.next();
			String j = checkChildEle(element);
			if (j == "") {
				json += "\""+element.getName() +"\""+":"+ "\""+element.getText().trim() + "\""
						+ ",";
			} else {
				json += j;
			}

		}
		json = json.substring(0, json.lastIndexOf(","));
		json += "}";
		return json;
	}

	public static Map<String, String> domjxml(String paramstr) throws Exception {
		map =  new HashMap<String, String>();
		try {
            // 将xml格式字符串转化为DOM对象
            org.dom4j.Document document = DocumentHelper.parseText(paramstr);
            // 获取根结点对象
            Element rootElement = document.getRootElement();
            Attribute rootattr = rootElement.attribute("Success");
            map.put("rootSuccess", rootattr.getValue());
            // 循环根节点,获取其子节点
            for (Iterator iter = rootElement.elementIterator(); iter.hasNext();) {
                Element element = (Element) iter.next(); // 获取标签对象
                // 获取该标签对象的属性
                Attribute attr = element.attribute("Success");
                if (null != attr) {
                    String attrVal = attr.getValue();
                    String attrName = attr.getName();
                    map.put("zappSuccess", attrVal);
                }
                // 循环第一层节点,获取其子节点
                for (Iterator iterInner = element.elementIterator(); iterInner
                        .hasNext();) {
                    // 获取标签对象
                    Element elementOption = (Element) iterInner.next();
                    // 获取该标签对象的名称
                    String tagName = elementOption.getName();
                    // 获取该标签对象的内容
                    String tagContent = elementOption.getTextTrim();
                    // 输出内容
                    map.put(tagName, tagContent);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
		return map;
	}
}



  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值