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
答
根据我们的聊天,问题是排队的:
<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
你试过了吗? – Buntylm
试过'NSXMLParser'委托方法进入元素,但不能进入正确的? – Samapple007
为什么不呢?它是有效的XML,在解析过程中出了什么问题? – Wain