所以,我收到了一个服务的soap响应,现在我需要解析它。我卡住了。对于这个响应,我想在底部获取“Gzk0P”值。请参阅xml下面的解析方法。谢谢!
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mysvc.myservice.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:createSubmissionResponse>
<return xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">error</key>
<value xsi:type="xsd:string">OK</value>
</item>
<item>
<key xsi:type="xsd:string">link</key>
<value xsi:type="xsd:string">Gzk0P</value>
</item>
</return>
</ns1:createSubmissionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"key"]) {
NSString *title = [attributeDict valueForKey:@"value"];
NSString *test = @"";
}
}
答案 0 :(得分:1)
你做错了,你无法访问属于dict的值。当与属性相同的标记中写入的值看到此
时,使用属性dictlt key gt xsi:type =“xsd:string”value =“Gzk0P”&gt; link lt / key gt
但是条件不同,值是标记中的单独标记,这就是为什么你需要到达值标记内部,并且在foundCharacters
方法中你可以访问该值。
编写像这样的东西
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
currentElementValue=string;
NSLog(@"Processing Value: %@", currentElementValue);
}
答案 1 :(得分:0)
尝试这种方式,虽然我没有测试过这个,但我希望这会起作用
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
key = nil;
[stringValue release];
stringValue = nil;
if([elementName isEqualToString:@"item"]){
if([elementName isEqualToString:@"value"]){
key = @"value";
return;
}}
答案 2 :(得分:0)
xml有两件事情。
For 1 - 您只需解析并使用值标记的最后找到的字符作为输出。
For 2 - 您必须找到一种方法,可以确定要解析的值。在这种情况下,需要编辑xml,修改标记或添加属性。
如果您需要更多信息,请发表评论。