2014-07-15 68 views
0

我正在處理所有用戶數據都依賴於Web服務的項目。 Web服務開發者發送xml作爲我的soap請求的響應。iOS中的動態Xml解析

在某些情況下,Web服務開發人員從相同Web服務的不同類生成xml。 在這種情況下,用不同的Element標籤生成xml。這裏登錄是我的web服務,並獲得在不同的情況下

//============Response 1====================Success======================================== 
    <soap:Envelope xmlns:soap="http://xyzs.com xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <soap:Body> 
      <LoginUserResponse xmlns="http://xyz.co/"> 
      <LoginUserResult> —————————————————————>StartElement 
       <ArrayOfUserLoginComplexType xmlns=""> 
        <UserLoginComplexType>  ——————————————————————>RowElement    
         <UserId>1</UserId> 
         <Role>User</Role> 
         <UserName>abc</UserName> 
         <Email>[email protected]</Email> 
         <ZipCode>0</ZipCode> 
         <IsRead>false</IsRead> 
         <IsWrite>false</IsWrite> 
         <IsDelete>false</IsDelete> 
         <NoOfUser>0</NoOfUser> 
         <isPediaPurchased>false</isPediaPurchased> 
         <isPaymentDone>false</isPaymentDone> 
        </UserLoginComplexType> 
       </ArrayOfUserLoginComplexType> 
      </LoginUserResult> 
      </LoginUserResponse> 
     </soap:Body> 
    </soap:Envelope> 

//============Response 2======================Failuer======================================= 
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <soap:Body> 
      <LoginUserResponse xmlns="http://tempuri.org/"> 
      <LoginUserResult> —————————————————————>StartElement 
       <ctMessageMst xmlns=「」>———————————————————— > RowElement 
        <MessageID>13</MessageID> 
        <TitleName>Xyz</TitleName> 
        <ProductID>0</ProductID> 
        <MessageText>Hi there</MessageText> 
        <MessageType>E</MessageType> 
        <Date>2014-07-15</Date> 
       </ctMessageMst> 
      </LoginUserResult> 
      </LoginUserResponse> 
     </soap:Body> 
    </soap:Envelope> 

//--------XML Parser Code----------------------------------------------------------------- 
     - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
     namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
     attributes:(NSDictionary *)attributeDict 
     { 
     if([elementName isEqualToString:@"GetAllMessageListResult"]) { 
      [email protected]"ctMessageMst"; 
      [self CreateDictionary];  
     } 
     else if([elementName isEqualToString:@"LoginUserResult"]) {   
      [email protected]"UserLoginComplexType"; //Hardcode condition that i have implemented 
      [self CreateDictionary]; 
     }..... 

在我的項目我做了硬編碼爲Rowelement兩種不同的反應,但我想它的動態我怎麼能做到這一點動態impelementation?

我已經參考蘋果示例代碼,但在該代碼也推動硬編碼條件。

  • 案例1.在1效應初探我正在----(UserLoginComplexType)作爲 Rowelement

  • 案例2.在響應2我正在----(ctMessageMst的xmlns = 「」 )作爲 Rowelement

    在我的XML解析器的代碼,我有靜態實施,這將無法工作在案例2 我沒有得到知道該怎麼做Rowelement名。

+0

這不是一個普通的XML數據,它的soap服務需要以不同的方式處理。嘗試用肥皂找到ios,有很多客戶可用。我知道的是http://sudzc.com/,它使用您的soap服務生成一個xcode項目,並執行所有的解析和處理。 – iphonic

回答

1

使用xmlreader解析任何複雜的XML。這將轉換複雜的XML到字典。