关于xml解析跟组装

关于xml解析和组装
最近有个得到一个很好的公用方法共大家分享一下
public class XmlUtil {
    public static boolean xSetValue(Document myDocument, String path, String value) {

		/*
		 * 对path进行合法性校验 它必须满足是"/"打头的,并且最后一个字符应该是英文字母或者数字。 去掉第一个字符"/"
		 */
		if (!path.startsWith("/") || path.endsWith("/") || path.length() < 1) {
			return false;
		} else {
			path = path.substring(1);
		}
		String[] items = path.split("/");
		Element parentElement = myDocument.getRootElement();
		for (int i = 0; i < items.length; i++) {
			/*
			 * 获取当前节点如果是第一个元素,那么它的父节点是root
			 */
			Element obj = null;
			List childList;
			String id = "";

			String itemIndex = "0";
			//存在同名节点情况
			int index1 = items[i].indexOf("|");
			if (index1 > 0) {
				itemIndex = items[i].substring(index1 + 1);
				items[i] = items[i].substring(0, index1);
			}
			//存在属性名情况
			int index2 = items[i].indexOf("<");
			int index3 = items[i].indexOf(">");
			if (index2 > 0 && index3 > 0 && index2 < index3) {
				id = items[i].substring(index2 + 1, index3);
				items[i] = items[i].substring(0, index2);
			}

			childList = parentElement.getChildren(items[i]);
			if (childList.size()<=0) {
				obj = new Element(items[i]);
				if (id.indexOf("=") > 0) {
					String item_key = id.substring(0, id.indexOf("="));
					String item_value = id.substring(id.indexOf("=") + 1);
					obj.setAttribute(item_key, item_value);
				}
				parentElement.addContent(obj);
			} else {
				for (int j = 0; j < childList.size(); j++) {
					if (index1 > 0) {
						if (childList.size() > Integer.parseInt(itemIndex)) {
							obj = (Element) childList.get(Integer
									.parseInt(itemIndex));
						} else {
							return false;
						}
					} else {
						obj = (Element) childList.get(j);
					}

					if (id.indexOf("=") > 0) {
						String item_key = id.substring(0, id.indexOf("="));
						String item_value = id.substring(id.indexOf("=") + 1);

						if (item_value.equals(obj.getAttributeValue(item_key))) {
							break;
						}
					}
				}
				//检查是否有属性值
				if (id.indexOf("=") > 0) {
					String item_key = id.substring(0, id.indexOf("="));
					String item_value = id.substring(id.indexOf("=") + 1);
					String ss = obj.getAttributeValue(item_key);
					if(null==obj.getAttributeValue(item_key)||!item_value.equals(obj.getAttributeValue(item_key))){
						obj = new Element(items[i]);
						obj.setAttribute(item_key,item_value);
						parentElement.addContent(obj);
					}
					
				}
			}			

			/*
			 * 如果循环到了树叶结点,则需要给它赋值 如果是树枝结点,则把当前节点
			 */
			if (i == items.length - 1) {
				obj.addContent(value);
			}
			parentElement = obj;

		}
		return true;
	}
         /**
	 * 返回xml整棵树的字符串,供其他应用调用。
	 * @return
	 */

	public static String printXmlString(Document myDocument) {
		String res = "";
		XMLOutputter outp = new XMLOutputter();
		res = outp.outputString(myDocument);
		System.out.println(res);
		return res;
	}
}


测试一下
public class JmsUtils  {
	
	private static Document doc;
	
	private static Element rootElement;
	
	public static String parseDataToDraft() {
			init();
			XmlUtil.xSetValue(doc, "/sys-header/field<name=Message_Code>", "9004");
			XmlUtil.xSetValue(doc, "/app-header/field<name=SrcSystem>", "UAAP");
			XmlUtil.xSetValue(doc, "/body/array/struct/field<name=userName>", "1");
			XmlUtil.xSetValue(doc, "/body/array/struct/field<name=userAccCode>", "3");
			XmlUtil.xSetValue(doc, "/body/array/struct/field<name=deptId>", "4");
			XmlUtil.xSetValue(doc, "/body/array/struct/field<name=systemId>", "dee2e65d6cd848f4a9b8fbfc76a725b6");
			XmlUtil.xSetValue(doc, "/body/array/struct/field<name=loginTime>", "5");
			XmlUtil.xSetValue(doc, "/body/array/struct/field<name=cancelTimen>", "6");
			XmlUtil.xSetValue(doc, "/body/array/struct/field<name=meno>", "7");	
		return XmlUtil.printXmlString(doc);
	}
	
	public static void init(){
		rootElement = new Element("service");
		rootElement.setAttribute("name", "PowerModel");
		doc = new Document(rootElement);
	}
	
	public static void main(String args[]) throws Exception{
		parseDataToDraft();
	}
}



结果:
<?xml version="1.0" encoding="UTF-8"?>
<service name="PowerModel"><sys-header><field name="Message_Code">9004</field></sys-header><app-header><field name="SrcSystem">UAAP</field></app-header><body><array><struct><field name="userName">1</field><field name="userAccCode">3</field><field name="deptId">4</field><field name="systemId">dee2e65d6cd848f4a9b8fbfc76a725b6</field><field name="loginTime">5</field><field name="cancelTimen">6</field><field name="meno">7</field></struct></array></body></service>