使用 touchXML 解析 SOAP 响应 - 一个问题
我还有 obj-c 的另一个问题: 我正在尝试解析此 XML:
情况如下:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetMyDashboardResponse xmlns="http://tempuri.org/">
<GetMyDashboardResult>
<MyDashboard>
<Profile>Speed Seeker</Profile>
<UserID>6</UserID>
<VenueName>Prasowa</VenueName>
<FriendsCount>10</FriendsCount>
<FollowingCount>11</FollowingCount>
<FollowersCount>12</FollowersCount>
<StatusMessage>aaa</StatusMessage>
<StatusDate>2010-08-04T11:38:09.733</StatusDate>
<CheckedInTimeStamp>2010-07-30T13:48:24</CheckedInTimeStamp>
</MyDashboard>
</GetMyDashboardResult>
</GetMyDashboardResponse>
</soap:Body>
</soap:Envelope>
以下是我尝试完成它的方法:
NSMutableArray *res = [[NSMutableArray alloc] init];
CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:XMLData options:0 error:nil] autorelease];
NSArray *nodes = NULL;
nodes = [doc nodesForXPath:@"//MyDashboard" error:nil];
for (CXMLElement *node in nodes)
{
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
int counter;
for(counter = 0; counter < [node childCount]; counter++)
{
[item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]];
}
[item setObject:[[node elementsForName:@"Profile"] stringValue] forKey:@"profileName"]; // <------ this magical arrow is pointing to the area of interest
NSLog(@"petla");
[res addObject:item];
[item release];
}
NSLog(@"%@", res);
[res release];
`
感谢您的帮助。
i've another problem with obj-c:
i'm trying to parse this XML :
here's the case:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetMyDashboardResponse xmlns="http://tempuri.org/">
<GetMyDashboardResult>
<MyDashboard>
<Profile>Speed Seeker</Profile>
<UserID>6</UserID>
<VenueName>Prasowa</VenueName>
<FriendsCount>10</FriendsCount>
<FollowingCount>11</FollowingCount>
<FollowersCount>12</FollowersCount>
<StatusMessage>aaa</StatusMessage>
<StatusDate>2010-08-04T11:38:09.733</StatusDate>
<CheckedInTimeStamp>2010-07-30T13:48:24</CheckedInTimeStamp>
</MyDashboard>
</GetMyDashboardResult>
</GetMyDashboardResponse>
</soap:Body>
</soap:Envelope>
and here's how i'm trying to accomplish it:
NSMutableArray *res = [[NSMutableArray alloc] init];
CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:XMLData options:0 error:nil] autorelease];
NSArray *nodes = NULL;
nodes = [doc nodesForXPath:@"//MyDashboard" error:nil];
for (CXMLElement *node in nodes)
{
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
int counter;
for(counter = 0; counter < [node childCount]; counter++)
{
[item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]];
}
[item setObject:[[node elementsForName:@"Profile"] stringValue] forKey:@"profileName"]; // <------ this magical arrow is pointing to the area of interest
NSLog(@"petla");
[res addObject:item];
[item release];
}
NSLog(@"%@", res);
[res release];
`
thanks for any help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
[node elementsForName]
将返回NSArray
,因此您绝对不能在其上使用stringValue
。创建临时NSArray
,为其设置elementsForName
,检查其对象数量是否> 0,获取objectAtIndex:0
就可以了![node elementsForName]
will returnNSArray
, so you definitely can't usestringValue
on that. Create temporaryNSArray
, setelementsForName
to it, check if its object count > 0, takeobjectAtIndex:0
and you're good to go!