NSXMLParser解析SOAP响应
问题描述:
所以,我收到了一个服务的肥皂响应,现在我需要解析它。我陷入困境。对于这个回应,我想抓住“Gzk0P”的价值。看到我的解析方法在xml下面。谢谢!NSXMLParser解析SOAP响应
<?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 = @"";
}
}
答
你做错了,你不能访问值形式归于字典。当写入在相同的代码作为属性值看到此
LT键GT的xsi归因字典用于:类型=“XSD:字符串”值=“Gzk0P”>链路LT /键GT
但这里是条件是不同的,值是标签中的一个单独的标签,这就是为什么您需要到达值标签内部,并且在foundCharacters
方法中您可以访问该值。
代码一些这样的事
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
currentElementValue=string;
NSLog(@"Processing Value: %@", currentElementValue);
}
答
试试这个办法,虽然我没有测试过这一个,但我希望这将工作
- (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;
}}
答
有与XML相关的两件事情。
- xml是否总是与您发布的相同,并且您对最后一个标记的值感兴趣?
- 如果它不会相同,那么您会感兴趣的价值是什么?
对于1-您可以简单地解析并使用值标记的最后找到的字符作为输出。
对于2 - 你将不得不找到一种方法,你可以确定你想要解析的值。在这种情况下,需要编辑xml,修改标签或添加属性。
如果您需要更多信息,请留下评论。
我用这种方法。我可能没有以最干净的方式做到这一点,但我基本上更新currentElementValue等于'字符串',当'字符串'等于'链接',然后我知道我感兴趣的值接下来,所以如果currentElementValue ==“链接“,然后我再次更新currentElementValue等于我想要的5个字符值..无论如何。谢谢! –