WebService常识问题:如何处理返回过来的xml格式的字符串?

B先生2012 2010-09-06 01:07:16
我现在的做法是完全把返回过来的字符串当成字符串来处理,用操作字符串的方法操作截取,
但这样如果数据多的话 感觉复杂,网上看了下没看明白具体如何操作返回过来的xmlString,
我现在的项目数据全部来源于webservice,所以找到一种合适的方式很关键,期待各位的帮助...

3.9 获取公告列表
3.9.1 功能说明
获取公告列表

3.9.2 接口说明
上行报文:
<?xml version="1.0" encoding="UTF-8"?>
<INTF>
<OPER_INFO>
<OP_ID></OP_ID><!--必填->
<PASSWORD></PASSWORD ><!--必填:操作员密码,明文-->
</OPER_INFO >
<INTF_PARAMS>
<INTF_CODE></INTF_CODE> <!--必填,1007 -->
<AGENT_ID></AGENT_ID><!—代理商ID-->
<PAGE></PAGE><!—页数,当前页:0-->
<INTF_PARAMS>
</INTF>

下行报文:
<?xml version='1.0' encoding='UTF-8'?>
<INTF>
<RET_INFO>
<NOTE_INFO></NOTE_INFO><!— ID#公告标题#公告时间 -->?这里返回的话,涉及到分页,是否还要有公告总条数
</RET_INFO >
<ERR_INFO>
<ERROR_CODE></ERROR_CODE><!--错误代码 0成功-->
<ERROR_MSG></ERROR_MSG><!--错误信息 -->
<ERROR_HINT></ERROR_HINT><!--提示信息-->
</ERR_INFO>

</INTF>
...全文
2483 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
勿说心想 2011-04-18
  • 打赏
  • 举报
回复
private DataSet GetDataSet(string text)
{
try
{
XmlTextReader reader = new XmlTextReader(new StringReader(text));
reader.WhitespaceHandling = WhitespaceHandling.None;
DataSet ds = new DataSet();
ds.ReadXml(reader);
reader.Close();
ds.Dispose();
return ds;
}
catch (Exception err)
{
throw new Exception("GetDataSet方法异常:" + err.Message);
}
}
tooh 2010-09-07
  • 打赏
  • 举报
回复
可以用jdom或者是dom4j,或者是w3c的解析器来解析,如果你的xml满足有些规范的话,应该有内置的解析器 基本不用你写什么
B先生2012 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zxingchao2009 的回复:]
用dom4j解析,直接将获得xml字符串调用下表的方法生成document对象,然后对document对象遍历得到所需的结果,建议楼主去学习下dom4j之document的操作。至于分页调用webservice的入参增加每页显示的数目及其起始行,出参在后台生成xml文件的时候增加总记录数,并在NOTE_INFO中只返回当前页的信息
Document doc=DocumentHelper.pars……
[/Quote]

目前认为这是最好的方法了,简单高效,
关键就是这句 Document doc=DocumentHelper.parseText(xmlStr);
把字符串直接变为document对象,之前我以为非要先把xmlstr写到xml文件才能进一步转化为document对象。学习了...
loveofmylife 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 humanity 的回复:]

我觉得应该用 XML API 做,手工字符串处理不是好办法,以后会经常改动它就麻烦。

我看 Google 的做法好像是在 JavaScript 中使用 XSL 把数据直接转换成 HTML,然后嵌入到一个 DIV 之类的东西里就完了。这样数据和 XSL 单独下载,XSL 可以缓存。这个脚本项目在 sourceforge 上有,只记得项目名中带 xslt 的。

用这种方案就不需要在处理器……
[/Quote]
ajax+xslt+xpath,感觉很少有用xslt的
loveofmylife 2010-09-06
  • 打赏
  • 举报
回复
一般都是是根据自己写的服务返回自己定义格式的xml,然后写个工具类对这种格式进行解析,解析xml的方式就很多了
humanity 2010-09-06
  • 打赏
  • 举报
回复
我觉得应该用 XML API 做,手工字符串处理不是好办法,以后会经常改动它就麻烦。

我看 Google 的做法好像是在 JavaScript 中使用 XSL 把数据直接转换成 HTML,然后嵌入到一个 DIV 之类的东西里就完了。这样数据和 XSL 单独下载,XSL 可以缓存。这个脚本项目在 sourceforge 上有,只记得项目名中带 xslt 的。

用这种方案就不需要在处理器上花时间,只需要为一个消息类型写一个XSL,当然需要对 XSL 比较熟悉。
龙四 2010-09-06
  • 打赏
  • 举报
回复
试试JAXB,直接转换成对象
UPC_思念 2010-09-06
  • 打赏
  • 举报
回复
用dom4j解析,直接将获得xml字符串调用下表的方法生成document对象,然后对document对象遍历得到所需的结果,建议楼主去学习下dom4j之document的操作。至于分页调用webservice的入参增加每页显示的数目及其起始行,出参在后台生成xml文件的时候增加总记录数,并在NOTE_INFO中只返回当前页的信息
Document doc=DocumentHelper.parseText(xmlStr);
//取得RET_INFO节点下的集合
List<Element> ret_infoList=doc.getRootElement().elements("RET_INFO");
for(Element e:ret_infoList){
Element NOTE_INFO=e.element("NOTE_INFO");
省略。。。。。。
}
B先生2012 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huntor 的回复:]
如果只想解析数据出来,使用XPath或者XQJ最简单了。
[/Quote]

我的就是webService ,现在的问题是,我调用webserivice方法,获取到了一个xmlString 字符串,这个字符串是xml格式的,譬如:
<?xml version='1.0' encoding='UTF-8'?>
<INTF>
<RET_INFO>
<NOTE_INFO></NOTE_INFO><!— ID#公告标题#公告时间 -->?这里返回的话,涉及到分页,是否还要有公告总条数
</RET_INFO >
<ERR_INFO>
<ERROR_CODE></ERROR_CODE><!--错误代码 0成功-->
<ERROR_MSG></ERROR_MSG><!--错误信息 -->
<ERROR_HINT></ERROR_HINT><!--提示信息-->
</ERR_INFO>
</INTF>


我就是想找一种合理的方法,从这个xml字符串里取得返回过来的信息然后展示在页面上,请问咋办,能否详细点儿,不胜感激..
huntor 2010-09-06
  • 打赏
  • 举报
回复
如果只想解析数据出来,使用XPath或者XQJ最简单了。
CoderPlusPlus 2010-09-06
  • 打赏
  • 举报
回复
你这个确定是webservice么?怎么没看到SOAP报文呢,webservice是不需要你自己处理xml报文的,由工具根据wsdl生成客户端代码,直接调用生成的客户端里的服务方法就行了
huntor 2010-09-06
  • 打赏
  • 举报
回复
字符串可以包装成StringReader或者 CharArrayReader使用,没必要先写到文件再处理。
B先生2012 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bingyingao 的回复:]
我是想找一种合理高校的方案,是直接操作这个xml格式的字符串,还是先把它写入到xml文件,再对该xml文件进行解析...
[/Quote]

或许最好的方法只能这样...
yaoweijq 2010-09-06
  • 打赏
  • 举报
回复
直接操作字符串么,写成xml再读多此一举?。。。
B先生2012 2010-09-06
  • 打赏
  • 举报
回复
我是想找一种合理高校的方案,是直接操作这个xml格式的字符串,还是先把它写入到xml文件,再对该xml文件进行解析...
dr_lou 2010-09-06
  • 打赏
  • 举报
回复
dom4j等xml工具可以的吧。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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