JDom

/**
 * 
 */
package com.pc.cashflow.util;

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

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
 * @author Administrator
 * 
 */
public class JDOMXmlWriter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String xmlPath1 = "TxnDetails/TxId";
		String xmlPath = "SettleParties/Pty1/AnyBIC";
		String[] paths = {"A/B/C/", "A/B/C/D/", "A/B/E/Cd/Cd/", "A1/"};
		String value = "HSBCJPJT";
		
		
		Element root = new Element("Document");
		Document xmlDoc = new Document(root);
		Format fmt = Format.getPrettyFormat();
		XMLOutputter out = new XMLOutputter(fmt);
		
		
		for(int i=0;i<paths.length;i++){
			
			
			String[] tags = paths[i].split("/");
			List<Element> tagList = new ArrayList<Element>();
			List tagList0 = new ArrayList();
			for(int j=0;j<tags.length;j++){
				String tagLocation = getTagLocation(tags[j], paths[i]);
				if(tagLocationExist(tagLocation, paths, i)==false){
					Element tmp = new Element(tags[j]);
					tagList.add(tmp);
					Map map = new HashMap();String preTag = "";if(j>0)preTag=tags[j-1];
					map.put(preTag, tmp);
					tagList0.add(map);
				}
			}
			//constructXMLTag(root, tagList, i);
			constructXMLTag0(root, tagList0);
			
		}

		
		try {
			out.output(xmlDoc, System.out);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		/*
		List list = new ArrayList();
		String[] tags = xmlPath.split("/");
		for (String tag:tags) {
			Element tmp = new Element(tag);
			list.add(tmp);
		}
		
		//(Element)(list.get(0)).addContent(list.get(1).addContent(list.get(2).addContent(list.get(3))));
		root.addContent(new Element("Test").addContent(new Element("Test2")));
		for(Iterator iter = root.getDescendants();iter.hasNext();){
			System.out.println(iter.next());
		}
		
		for(int i=0;i<list.size()-1;i++){
			Element tmp = (Element)list.get(i);
			if(i==0){root.addContent(tmp);}
			Element tmp1 = (Element)list.get(i+1);
			/*
			if(i==list.size()-3){
				tmp1.setText("aaa");
				}
			if(i==list.size()-2){
				tmp1.setText(value);
				}
			tmp.addContent(tmp1);
		}
		
		/*
		//for(int i=list.size();i==0;i--){
			int i = 0;
			Element tmp = (Element)list.get(i);
			
			Element tmp1 = (Element)list.get(++i);//1
			tmp.addContent(tmp1);
			
			Element tmp2 = (Element)list.get(++i);//1   //2
			tmp1.addContent(tmp2);
			
			Element tmp3 = (Element)list.get(++i);		//2
			tmp2.addContent(tmp3);
		//}*/
	}
	//path: A/B/C/D
	//tag: C
	//return: A/B/C
	private static String getTagLocation(String tag, String path){
		int idx = path.indexOf(tag);
		return path.substring(0, idx+tag.length());
	}
	//paths: A/B/C A/B/C/D
	private static boolean tagLocationExist(String tagLocation, String[] paths, int curIdx){
		if(curIdx==0)return false;
		for(int a=0;a<curIdx;a++){
			if(paths[a].startsWith(tagLocation) == true)return true;
		}
		return false;
	}
	//1
	//1	//2   <------ chain point
		//2
	private static void constructXMLTag(Element root, List tagList, int init){
		System.out.println("-------construct start-------");
		if(init==0){
			Element parent = (Element)tagList.get(0);
			root.addContent(parent);
			System.out.println("root appended parent point: " + parent.getName());
			if(tagList.size()==1)System.out.println("No chain point.");
			for(int i=0;i<tagList.size()-1;i++){
				Element tmp = (Element)tagList.get(i);
				Element tmp1 = (Element)tagList.get(i+1);
				tmp.addContent(tmp1);//<------ chain point
				System.out.println("add chain point: " + tmp.getName() + "/" + tmp1.getName());
			}
		}else{
			
		}
		System.out.println("-------construct end-------");
	}
	//1
		//1	//2   <------ chain point
			//2
		private static void constructXMLTag0(Element root, List tagList){
			System.out.println("-------construct start0-------");
			
			for(int i=0;i<tagList.size();i++){
				HashMap tmpHm = (HashMap)tagList.get(i);
				String preTag = (String)tmpHm.keySet().iterator().next();
				Element element = (Element)tmpHm.values().iterator().next();
				Element e = findChild(root, preTag);
				if(e!=null){
					e.addContent(element);//<------ chain point
					System.out.println("added chain point: " + e.getName() + "/" + element.getName());
				}else{
					root.addContent(element);
					System.out.println("root appended parent point: " + element.getName());
				}
			}
			System.out.println("-------construct end0-------");
		}
		private static Element findChild(Element root, String name){
			Element ele = null;
			for(Iterator iter = root.getDescendants();iter.hasNext();){
				Element tmp = (Element)iter.next();
				if(tmp.getName().equalsIgnoreCase(name))ele=tmp;
			}
			return ele;
		}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值