我正在尝试解析使用SOAP从WebService收到的字符串后面的thE。因为我无法解析从我的web服务接收的数据(我不知道为什么..请看这里,parsing XML using Soap Web Services)我正在将数据转换为NSString,然后使用TOUCHXML解析字符串
NSString *theXML = [[NSString alloc]
initWithBytes: [webData mutableBytes]
length:[webData length]
encoding:NSUTF8StringEncoding];我得到的字符串是
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetCategoryResponse xmlns="http://tempuri.org/">
<GetCategoryResult>
<Root>
<Record>
<catid>1</catid><catname>Hi</catname><catlogo>http://10.25.4.49/monsoonstore/Category/50X50.GIF</catlogo>
</Record>
</Root>
</GetCategoryResult>
</GetCategoryResponse>
</s:Body>
</s:Envelope>由于我不能让任何解析器读取我从webservice获得的NSData,所以我将上面的字符串转换为以下字符串(即.这正是我需要的xml )
<Root><Record><catid>1</catid><catname>Hi</catname><catlogo>http://10.25.4.49/monsoonstore/Category/50X50.GIF</catlogo></Record></Root>
CXMLDocument *doc = [[CXMLDocument alloc] initWithXMLString:check options:0 error:nil];
NSArray *items = [doc nodesForXPath:@"//Root" error:nil];
for (CXMLElement *item in items)
{
NSLog(@"Root");
NSArray *titles = [item elementsForName:@"Record"];
for(CXMLElement *title in titles)
{
NSLog(@"Record");
break;
}
NSArray *categories = [item elementsForName:@"catid"];
for(CXMLElement *category in categories)
{
NSLog(@"catid");
break;
}
NSArray *artists = [item elementsForName:@"catname"];
for(CXMLElement *artist in artists)
{
NSLog(@"catname");
break;
}
.
.
.
.调用Root日志和记录日志,而从不调用catid。我可能做错了什么??
发布于 2011-06-04 14:31:00
我认为您是在记录下(而不是根目录下)搜索catid,所以请更改
NSArray *categories = [item elementsForName:@"catid"];至
NSArray *categories = [titles elementsForName:@"catid"];我的意思是,在记录下搜索元素catid,而不是在根目录下。
我上面的代码可能会给你带来编译错误,因为我没有在TouchXML上工作过,但你知道我的意思。
发布于 2011-06-04 14:30:44
使用NSXMLParser,因为您指定需要一个可以由NSData直接创建的解析器。
NSXMLParser具有通过发送initWithData作为参数返回NSXMLParser实例的NSData。
- (id)initWithData:(NSData *)dataParsing XML on the iPhone using NSXMLParser。
https://stackoverflow.com/questions/6235124
复制相似问题