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); 

} 
+0

我用这种方法。我可能没有以最干净的方式做到这一点,但我基本上更新currentElementValue等于'字符串',当'字符串'等于'链接',然后我知道我感兴趣的值接下来,所以如果currentElementValue ==“链接“,然后我再次更新currentElementValue等于我想要的5个字符值..无论如何。谢谢! –

试试这个办法,虽然我没有测试过这一个,但我希望这将工作

- (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相关的两件事情。

  1. xml是否总是与您发布的相同,并且您对最后一个标记的值感兴趣?
  2. 如果它不会相同,那么您会感兴趣的价值是什么?

对于1-您可以简单地解析并使用值标记的最后找到的字符作为输出。

对于2 - 你将不得不找到一种方法,你可以确定你想要解析的值。在这种情况下,需要编辑xml,修改标签或添加属性。

如果您需要更多信息,请留下评论。