WSDL/XML解析iOS目标C

问题描述:

我想要一些帮助来解析这个响应。我认为这是WSDL,并希望检查“成功输入”字符串。下面是代码:WSDL/XML解析iOS目标C

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://example.com/reg/abc"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <sch:LoginResponse> 
     <sch:Status code=200>Successfully Entered</sch:Status> 
     <sch:Message>[CDATA[Successfully Entered]]</sch:Message> 
     </sch:LoginResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

编辑:下面是我已经实现

代码
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName 
    attributes: (NSDictionary *)attributeDict 
{ 
    NSLog(@"START ELEMENT NAME ==> %@", elementName); 
    if([elementName isEqualToString:@"sch:Status"]) 
    { 
     if(!soapResults) 
     { 
      soapResults = [[NSMutableString alloc] init]; 
     } 
     elementFound = YES; 
    } 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if(elementFound) 
    { 
     [soapResults appendString:string]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    NSLog(@"END ELEMENT NAME ==> %@", elementName); 
    if([elementName isEqualToString:@"sch:Status"]) 
    { 
     NSLog(@"Found ==> %@", soapResults); 
     [soapResults setString:@""]; 
     elementFound = FALSE; 
    } 
} 

打印日志显示高达sch:LoginResponse和不来的元素名称sch:Status

+0

你试过了吗? – Buntylm

+0

试过'NSXMLParser'委托方法进入元素,但不能进入正确的? – Samapple007

+0

为什么不呢?它是有效的XML,在解析过程中出了什么问题? – Wain

根据我们的聊天,问题是排队的:

<sch:Status code=200>Successfully Entered</sch:Status> 

code=200更改为code="200"它解析正确。

换句话说,XML格式不正确。数据周围的属性应该有一个(')或双引号(")。 (见W3C XML recommendaiton

另外,委托检测的XML错误NSXMLParserAttributeNotStartedError保持不变时:

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { 
    NSLog(@"Error: %@", parseError.localizedDescription); 
} 

如果XML 必须检索这种方式,解析您可以使用它来包围前它带有引号使其有效,但是你需要为每个可能的做code=###

yourXMLString = [yourXMLString stringByReplacingOccurrencesOfString:@"code=200" withString:@"code=\"200\""]; 
+0

谢谢,它帮助我很多。你是一个STAR @rog – Samapple007