2012-07-15 42 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