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的什么位置,所以还是检查下你究竟在迭代什么元素吧:
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;
}
|