基于SOAP的xml网络交互心得
感谢小二同学将遇到的问题分享给我们,再此给以掌声。如果看不懂下面文章的建议查找一下HTTP协议的文艺,对HTTP协议要有个概念。
XML网络交互心得
目录
一、 xml解析
1、根路径下
2、some路径下
二、 xml soap请求
一、 xml解析(例:如下图xml返回值)
首先下载GDataXMLNode库,安装见网络教程
1、根路径下
例:<res>
.m文件中
#import” GDataXMLNode”
NSString *soapMsg = [NSStringstringWithFormat:
@"<?xmlversion=\"1.0\" encoding=\"utf-8\"?>\n"//通用
"<soap:Envelopexmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"//通用
"<soap:Body>\n"//通用
"<someThingToDoxmlns=\"http://xxx.xxx.xxx/\">\n"//注释1
"<xxxx>%@</xxxx>\n"
"<xxxx>%@</xxxx>\n"
"<xxxx>%@</xxxx>\n"//注释2
"</someThingToDo>\n"
"</soap:Body>\n"
"</soap:Envelope>\n"
,@"A106",@"A10602",[NSStringstringWithFormat:@"<?xml version=\"1.0\"encoding=\"utf-8\"?><root><loginname>%@</loginname><loginpwd>%@</loginpwd><hqid>%@</hqid></root>",@"13811110001",@"123456",@"94d1a83e961f4fbf86b2291c502f1a11"]];
//判断是否成功
if (doc)
{
NSArray *images = [doc nodesForXPath:@"//res" error:nil];//关键:用xpath的//方法找到res的相对路径
NSLog(@"%@",images);//打印一下,越打越安心
for(GDataXMLElement *ppp in images)//找到images中的元素
{
NSLog(@"%@",ppp.stringValue);//打印
}
}
2、some路径下
例:<row>
.m文件中
#import” GDataXMLNode”
NSData *xmlData = [[NSData alloc]initWithContentsOfFile:str];//同上 GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlDataoptions:0 error:nil]; //同上
if (doc)
{
NSArray *addr = [doc nodesForXPath:@"//row" error:nil]; //同上
for(GDataXMLElement *temp in addr) //同上
{
NSLog(@"%@",temp); //同上
for(GDataXMLElement *here in temp.children) //因为在row的下面还有一层,所以这里找row的孩子
{
NSLog(@"here is%@",here.stringValue);//同上
}
}
}
二、 xml soap请求
webservice的服务器是不能接收浏览器gei方法或者直接setvalue的,他需要拼出符合xml规则的soap字符串
直接代码举例
//注释3
NSLog(@"%@", soapMsg); //越打越放心
// 创建URL,内容是前面的请求报文报文中第二行主机地址加上第一行URL字段
NSURL *url = [NSURL URLWithString: @"http://xxx.xxx/xxx/xxx/"];//注释4
// 根据上面的URL创建一个请求
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];//通用
NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMsg length]];//通用
// 添加请求的详细信息,与请求报文前半部分的各字段对应
[req addValue:@"text+xml; charset=utf-8"forHTTPHeaderField:@"Content-Type"];//通用
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];//通用
[req addValue: @" http://xxx.xxx.xxx/ someThingToDo "forHTTPHeaderField:@"SOAPAction"]; //注释5
// 设置请求行方法为POST,与请求报文第一行对应
[req setHTTPMethod:@"POST"];//通用
// 将SOAP消息加到请求中
[req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]]; //通用
// 创建连接
NSURLResponse *reponse; //通用
NSError *error = nil; //通用
NSData *responseData = [NSURLConnection sendSynchronousRequest:reqreturningResponse:&reponse error:&error]; //返回值
if(responseData)
{
NSString *responseString = [[NSString alloc] initWithData:responseDataencoding:NSUTF8StringEncoding]; //把返回值转成string
NSLog(@"%@",responseString); //打印出来检查一下,很开心
}
注释1:<someThingToDo xmlns=\"http://xxx.xxx.xxx/\">\n"这里的someThingToDo是webservice的方法名,我们会通过这个方法访问服务器,不然访问不到;http://xxx.xxx.xxx/是这个方法的命名空间,注意这个不是服务器的url(重要)
注释2:这三行是注释1中方法的参数,前两个是普通str,第三个是xml的str(见注释3)
注释3:普通str可以直接%@加入,xml的str需要注意里面的”(需要用\转义)和<(写为<)、>(写为>)尤其是<、>不按照括号里的写法的话,服务器是不认的
注释4:NSURL *url = [NSURL URLWithString: @"http://xxx.xxx/xxx/xxx/"];这个才是我们访问的url,要和注释1的命名空间区分
注释5:[req addValue: @" http://xxx.xxx.xxx/ someThingToDo "forHTTPHeaderField:@"SOAPAction"];很重要,这里添加我们的访问方法,这里的http://xxx.xxx.xxx/和someThingToDo都要与注释1的对应好~
到此为止,感谢大家对我的帮助,希望也能帮到大家。
QQ群号:241465868
基于SOAP的xml网络交互心得的更多相关文章
- 2.Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)-
转自:https://blog.csdn.net/a214919447/article/details/55260411 SOAP(Simple Object Access Protocol,简单对象 ...
- 基于Android Volley的网络请求工具
基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...
- 5.使用SOAP的XML消息传递
转自:https://blog.csdn.net/u014066037/article/details/51724658 使用SOAP的XML消息传递的简易流程图: 详细步骤如下: (1)服务请求者的 ...
- 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...
- wemall app商城源码Android 获取XML网络数据并绑定到ListView
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享Android 获取XML网络数据并绑定到Li ...
- 第二篇:利用shell脚本执行webservice请求——基于soap
1. 项目背景 以往我们在开发基于webservice的项目中,我们总习惯于直接使用webservice的一些框架,如Axis,axis2和Xfire等.框架的好处是将webservice所涉及到的s ...
- 使用CXF实现基于Soap协议的WebService
本文介绍使用CXF实现基于Soap协议的WebService(CXF的版本是3.0.0) 一. 前言 Java有三种WebService规范:Jax-WS,Jax-RS,Jaxm 1. Jax-WS( ...
- iOS网络交互数据格式解析之json
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式.从ios5开 始,apple提供了对json的原生支持,但为了兼容以前的ios版本,我们仍然需要使用第三方库来解析常用 ...
- 一篇文章带你了解axios网络交互-Vue
来源:滁州SEO 1 **什么是axios呢?**了解,并去使用它,对于axios发送请求的两种方式有何了解,以及涉及axios跨域问题如何解决. 对于axios网络交互,去使用axios的同时,首先 ...
随机推荐
- linux之grep用法
运用场景:在当前目录下查找,比如代码目录,不需要在.svn目录下,以及ctags生成的tags文件中查找: grep的--exclude-dir=参数就是为了排除某个目录的,即不包含等号后面的目录: ...
- 【JAVA】使用Eclipse依赖生成jar包时,避免最外层同时生成资源文件的配置。
使用Eclipse依赖生成jar包时,如果做配置,生成的jar包文件会全部生成在外面,这并不是我们需要的,下面我们一起来修改下配置,使生成的jar包符合我们的需求吧. 1.如果不做任何配置生成的jar ...
- [LeetCode]题解(python):014-Longest Common Prefix
题目来源: https://leetcode.com/problems/longest-common-prefix/ 题意分析: 这道题目是要写一个函数,找出字符串组strs的最长公共前缀子字符串. ...
- A package manager for Qt
官网 http://www.qpm.io/ A package manager for Qt 注释:这个网站类似JavaScript的包管理器的网站https://www.npmjs.com/ 都是给 ...
- hibernate 持久化对象的生命周期 2.1
持久化对象的生命周期 瞬态(自由态) 表示对象在内存中存在,在数据库中没有数据相关,比如刚刚new出来的一个对象 持久态 持久态指的是持久化对象处于由Hibernate管理的状态,这种状态下持久化对象 ...
- DataReader的例子
前: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataReader对 ...
- CMake 简单介绍
CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran/Java 的相依性的自动分析功能,免除了程序员对代码依赖 ...
- BZOJ 1610: [Usaco2008 Feb]Line连线游戏
1610: [Usaco2008 Feb]Line连线游戏 Description Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 &l ...
- 【IPC进程间通信之四】数据复制消息WM_COPYDATA
IPC进程间通信+数据复制消息WM_COPYDATA IPC(Inter-Process Communication,进程间通信). 数据复制消息WM_C ...
- VC++网络高级编程
内含<VC网络高级编程>电子书 及源代码. 第一章.TCP/IP协议.第二章.Winsock网络编程接口:第二章.Visual C++与网络编程:第四章.基本网络编程技术:第五章.Teln ...