0

object-c を使用して iOS アプリ用に逆シリアル化する必要がある XML ファイルに Java からオブジェクトをシリアル化しました。

私は初めて 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>
...

次に、XML の特定のセクションに (NSObject から派生した) クラスを指定LevelSpritesましSpriteCostumes

私の問題は、値がどのクラスに対応するかを XMLParser が実際には「認識」していないことです。対応するプロパティを設定するには、異なるクラス間で異なる必要があります。

たとえば、次の行は、Levelオブジェクトのすべてのプロパティ (最初のレベル<Content.Project>以外<spriteList>など) に対して機能します。

したがって、基本的に私の質問は次のとおりです。XMLファイルのさまざまな「レベル」または「深さ」を区別する方法はありますか...

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

...パーサーのメソッド?

これを達成する簡単な方法があるに違いないと確信していますが、グーグルで見つけられませんでした。前もって感謝します。

4

1 に答える 1

0

深度カウンターを作ります。didStartElement で増やし、didEndElement で減らします :-)

于 2012-07-15T18:49:56.210 に答える