2012-07-15 30 views
0

我已經從Java對象序列化到一個XML文件,我必須使用objective-c爲iOS應用程序反序列化。NSXMLParser與多個類

我第一次使用NSXMLParser並在objective-c中有給定的對象結構。

下面是XML文件的一個示例:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Content.Project> 
    <versionName>0.5.241</versionName> 
    <spriteList> 
    <Content.Sprite> 
     <costumeDataList> 
     <Common.CostumeData> 
      <costumeFileName>CCE87ECA859D4448BC47A837CF024464_background</costumeFileName> 
      <costumeName>background</costumeName> 
     </Common.CostumeData> 
     </costumeDataList> 
     <soundList/> 
     <scriptList> 
     <Content.StartScript> 
      <brickList> 
      <Bricks.SetCostumeBrick> 
       <costumeData reference="../../../../../costumeDataList/Common.CostumeData"/> 
       <sprite reference="../../../../.."/> 
      </Bricks.SetCostumeBrick> 
      </brickList> 
      <sprite reference="../../.."/> 
      <name>stageStartScript</name> 
     </Content.StartScript> 
     </scriptList> 
     <name>Background</name> 
    </Content.Sprite> 
... 

然後我給類(從NSObject的衍生)的XML的某些部分,如包含的SpritesSprite陣列的Level類依次包含數組Costumes依次類推......

我的問題是XMLParser並不真正「知道」該值對應哪個類。我必須區分不同的類來設置相應的屬性。

例如,以下行工程爲Level對象的所有屬性(的<Content.Project>第一級但不<spriteList>等): [self.level的setValue:self.currentElementValue forKey:的ElementName];

所以基本上我的問題是:是否有辦法在...

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 

...解析器的方法的XML文件中的不同「級別」或「深度」之間的區別?

我確定必須有一個簡單的方法來實現這一點,但我還沒有找到一個谷歌。 在此先感謝。

回答

0

做一個深度計數器。提高它在didStartElement,並減少它在didEndElement :-)

+0

這也是我的第一個想法,但由於XML的格式不規範而另一個團隊正在它仍然可以是任何的變化,所以我尋找一個通用的解決方案。 – Chris 2012-07-15 20:08:45

+0

我最終通過使用DOM解析器... – Chris 2012-07-20 20:48:28