2011-06-28 194 views
0

所以,我收到了一個服務的肥皂響應,現在我需要解析它。我陷入困境。對於這個迴應,我想抓住「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 = @""; 
    } 

} 

回答

1

你做錯了,你不能訪問值形式歸於字典。當寫入在相同的代碼作爲屬性值看到此

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個字符值..無論如何。謝謝! –

0

試試這個辦法,雖然我沒有測試過這一個,但我希望這將工作

- (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; 
    }} 
0

有與XML相關的兩件事情。

  1. xml是否總是與您發佈的相同,並且您對最後一個標記的值感興趣?
  2. 如果它不會相同,那麼您會感興趣的價值是什麼?

對於1-您可以簡單地解析並使用值標記的最後找到的字符作爲輸出。

對於2 - 你將不得不找到一種方法,你可以確定你想要解析的值。在這種情況下,需要編輯xml,修改標籤或添加屬性。

如果您需要更多信息,請留下評論。