NSXMLParser用于解析SOAP响应

时间:2011-06-28 06:25:13

标签: iphone objective-c xml

所以,我收到了一个服务的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 = @"";
    }

}

3 个答案:

答案 0 :(得分:1)

你做错了,你无法访问属于dict的值。当与属性相同的标记中写入的值看到此

时,使用属性dict

lt 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有两件事情。

  1. xml是否始终与您发布的相同,并且您对上一个标记的值感兴趣?
  2. 如果它不相同那么你会感兴趣的价值是什么?
  3. For 1 - 您只需解析并使用值标记的最后找到的字符作为输出。

    For 2 - 您必须找到一种方法,可以确定要解析的值。在这种情况下,需要编辑xml,修改标记或添加属性。

    如果您需要更多信息,请发表评论。