Axis2中OMElement对象解析的问题

Axis2中OMElement对象 (OMElement element) 直接 tostring() ; 可以看到完整的 xml格式。

知道它有 “几层” ,就通过几个 iterator  来遍历。 下面是通过递归方式获取 OMElement:

/**
 * 
 * @param ome      OMElement串, 可以 system.out.println看到其实就是一个xml,
 * @param layer_cnt  显示当前是多少层
 * @return
 */
	public static int loopfunc(OMElement ome, int layer_cnt)
	{
		int k = layer_cnt ;

		if (ome == null)
		{
			System.out.println(getspace(k) + "ome is null");
			return 1;
		}
		// System.out.println(ome.toString().length()+getspace(k)+ ome);
		// static int lv=1;
		// private OMElement omee;

		Iterator it1 = ome.getChildElements();
		// System.out.println("first:::"+ome.getf);
		while (it1.hasNext())
		{

			OMElement ome_l2 = (OMElement) it1.next();
			System.out.println(getspace(k) + ome_l2.getLocalName() + " -> " + ome_l2.getText());
			// System.out.println(ome_l2);
			loopfunc(ome_l2, k+1);
			// Iterator it11 = ome.getChildElements();

		}
		return 1;

	}

/**
 * 
 * @param c  获取需要几个TAB
 * @return  一个带c个TAB的字符串
 */
	static String getspace(int c)
	{
		String tmp = "";
		for (int i = 0; i < c; i++)
		{
			tmp = tmp + '\t';
		}
		return tmp;
	}

输出结果:

Airline1 -> 
	Address -> 
		enCityName -> Aershan
		cnCityName -> 阿尔山
		Abbreviation -> YIE
	Address -> 
		enCityName -> Akesu
		cnCityName -> 阿克苏
		Abbreviation -> AKU
	Address -> 
		enCityName -> Aletai
		cnCityName -> 阿勒泰
		Abbreviation -> AAT
	Address -> 
		enCityName -> Ali
		cnCityName -> 阿里
		Abbreviation -> NGQ



不停的 getChildElements(); while (iterator_layer2.hasNext()) 来遍历 , 



	public static void getresult2(OMElement   element)
	{
		Iterator iterator_layer1 = element.getChildElements();
		while (iterator_layer1.hasNext())
		{
			OMElement result = (OMElement) iterator.next();
			Iterator innerItr_layer2 = result.getChildElements();
			while (iterator_layer2.hasNext())
			{
				OMElement result_2 = (OMElement) iterator_layer2.next();

				Iterator innerItr_layer3 = result.getChildElements();
				{

					while (iterator_layer3.hasNext())
					{

						OMElement result_l3 = (OMElement) innerItr_layer3.next();
						String s2 = result_l3.getLocalName();
						String ss = result_l3.getText();
					}
				}

			}
		}

	}
}


--------------

对iterator进行迭代,每次innerItr取其子元素,这不是相当于对innerItr进行迭代了吗?

—— 不是的,XML结构的关系就类似于 List<List<List<List<...  对父节点进行迭代,不对子节点产生任何影响。


初学XML,最怕不知道进入了XML的什么位置,所以还是检查下你究竟在迭代什么元素吧:
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public  static  List<String> getResults(OMElement element) {
         if  (element ==  null ) {
             return  null ;
         }
System.out.println( "IN: "  + element);  // 新增
         Iterator iterator = element.getChildElements();
         Iterator innerItr;
         List<String> list =  new  ArrayList<String>();
         OMElement result =  null ;
         while  (iterator.hasNext()) {
             result = (OMElement) iterator.next();
System.out.println( "While: "  + result);  // 新增
             innerItr = result.getChildElements();
while  (innerItr.hasNext()) {   // 新增
   OMElement elem = (OMElement)innerItr.next();   // 新增
   System.out.println( "\tWhile: " +elem);   // 新增
   System.out.println( "\t\t"  + elem.getLocalName() +  ": "  + elem.getText());   // 新增
// 新增
         }
         return  list;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值