Axis2中OMElement对象解析的问题

xuanjie25 2012-09-15 11:05:27
用axis2写客户端,主要代码如下:

public static void main(String[] args) throws AxisFault {

ServiceClient sc = new ServiceClient();
Options opts = new Options();
opts.setTo(new EndpointReference(
"http://localhost:8080/webtools/control/SOAPService"));
opts.setAction("getShopScoreTest");
sc.setOptions(opts);
OMElement res = sc.sendReceive(createPayLoad());
System.out.println(res);

System.out.println(getResults(res));
}

打印res的结果是:
<getShopScoreResponse xmlns="http://ofbiz.apache.org/service/">
<map-Map>
<map-Entry>
<map-Key>
<std-String value="shopScore" />
</map-Key>
<map-Value>
<eeval-TaobaoShopScore createdStamp="2012-09-11 10:34:22.0" createdTxStamp="2012-09-11 10:34:21.0" deliveryScore="90" itemScore="90" lastUpdatedStamp="2012-09-11 11:22:30.0" lastUpdatedTxStamp="2012-09-11 11:22:30.0" serviceScore="100" sid="9000" />
</map-Value>
</map-Entry>
</map-Map>
</getShopScoreResponse>

现在我想得到<map-Value>中serviceScore的值,应该怎么取?我的代码如下:

public static List<String> getResults(OMElement element) {
if (element == null) {
return null;
}
Iterator iterator = element.getChildElements();
Iterator innerItr;
List<String> list = new ArrayList<String>();
OMElement result = null;
while (iterator.hasNext()) {

result = (OMElement) iterator.next();
innerItr = result.getChildElements();
// System.out.println(innerItr);
System.out.println(((OMElement)innerItr.next()).getLocalName());
}
return list;
}

上面的方法只打印出了map-Entry,也就是说map-key和map-value这两部分解析不了···请各位帮忙下,谢谢!
...全文
1935 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
好物。学习了
MiceRice 2012-09-16
  • 打赏
  • 举报
回复
层级比较深,你需要一开始就把element向其子节点深入一级。

另外,你没有用循环对 innerItr 进行迭代处理,比如:
while (innerItr.hasNext()) {
System.out.println(((OMElement)innerItr.next()).getLocalName());
}
xuanjie25 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

对iterator进行迭代,每次innerItr取其子元素,这不是相当于对innerItr进行迭代了吗?
—— 不是的,XML结构的关系就类似于 List<List<List<List<... 对父节点进行迭代,不对子节点产生任何影响。

初学XML,最怕不知道进入了XML的什么位置,所以还是检查下你究竟在迭代什么元素吧:

[/Quote]
非常感谢,找到问题在哪了,而且也学到点知识了。因为这个问题郁闷很久了,谢谢啦···
MiceRice 2012-09-16
  • 打赏
  • 举报
回复
对iterator进行迭代,每次innerItr取其子元素,这不是相当于对innerItr进行迭代了吗?
—— 不是的,XML结构的关系就类似于 List<List<List<List<... 对父节点进行迭代,不对子节点产生任何影响。


初学XML,最怕不知道进入了XML的什么位置,所以还是检查下你究竟在迭代什么元素吧:
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;
}
xuanjie25 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

层级比较深,你需要一开始就把element向其子节点深入一级。

另外,你没有用循环对 innerItr 进行迭代处理,比如:
while (innerItr.hasNext()) {
System.out.println(((OMElement)innerItr.next()).getLocalName());
}
[/Quote]

我有对innerItr进行迭代啊,result = (OMElement) iterator.next();
innerItr = result.getChildElements();
对iterator进行迭代,每次innerItr取其子元素,这不是相当于对innerItr进行迭代了吗??而且按照你说的加了个while改了下程序还是取不出值来,输出的都是空格

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧