2013-05-18 91 views
3

我想要一些幫助來解析這個響應。我認爲這是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

回答

2

根據我們的聊天,問題是排隊的:

<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