0

以下の XML を参照してください。

http://sosmoths.com/.xml/moths.xml

この XML には複数の画像名があり、それぞれのコントローラーで異なるタイトル (4 つのタイトルがあります) を表示する必要があります。私は 4 つのコントローラを持っており、それぞれの蛾の値を複数の画像の値とともに異なるコントローラに表示する必要があります。どうすればよいですか?

オブジェクトは1つでも4つでも作れますか?

私はそれで少し混乱しています、助けてください。

4

3 に答える 3

1

この XML には複数の画像名があり、それぞれのコントローラーで異なるタイトル (4 つのタイトルがあります) を表示する必要があります。私は 4 つのコントローラを持っており、それぞれの蛾の値を複数の画像の値とともに異なるコントローラに表示する必要があります。どうすればよいですか?

これは XML 解析の問題ではなく、アプリ アーキテクチャの問題のように思えます。

その XML は基本的にいくつかのデータを記述し、そのデータは通常、アプリケーション内のオブジェクトによって表されます。XML をローカルの CoreData ストア (メモリ内かディスク上かは関係ありません) に解析し、管理対象オブジェクトを通常どおりに表示する CoreData ベースのソリューションを使用できます。

または、それが典型的なデータ セットの代表であると仮定すると、それを解析して独自の手巻きオブジェクト (または、辞書や配列) に変換し、そこから表示することもできます。

SO で (および Google 経由で) XML を解析することについては、数多くの質問があります。

あなたの質問の 2 番目の部分は解決されていません。基本的に、アプリを model-view-controller パターンに適切にレイヤー化する必要があります。モデル レイヤーは XML を解析し、データを表すオブジェクト グラフを作成します。各コントローラーは、その単一のモデルへの参照を持ちます。

アプリが読み取り専用である限り、これは問題なく機能します。さまざまなコントローラーがオブジェクト グラフも編集することが予想される場合は、変更の伝達を処理する必要があるため、もう少し複雑にする必要があります (ここで CoreData が活躍します。これにより、変更管理、伝達、検証が行われます)。 、比較的簡単に取り消すことができます)。

于 2011-10-03T16:14:02.930 に答える
0

TBXML を使用すると、xml を簡単に解析でき、使用するオブジェクトに変換されます。

http://www.tbxml.co.uk/TBXML/TBXML_Free.html

また、libxml2 は簡単に解析できることも特徴です。

于 2011-10-03T05:12:16.210 に答える
0
try this it worked properly       
  -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
            NSLog(@"%@",elementName);
            if([elementName isEqualToString:@"moths"]){
                mytblarray=[[NSMutableArray alloc] init];
            } else if([elementName isEqualToString:@"moth"]){
                tmpdic=[[NSMutableDictionary alloc] init];
            }
            else if([elementName isEqualToString:@"images"]){
                imgArray=[[NSMutableArray alloc] init];
            }

        }

        -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

            if(tmpstr!=nil && [tmpstr retainCount]>0){ [tmpstr release]; tmpstr=nil; }
            tmpstr=[[NSString alloc] initWithString:string];

        }

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

            if([elementName isEqualToString:@"moth"]){
                [mytblarray addObject:tmpdic];
                [tmpdic release];
            }if([elementName isEqualToString:@"images"]){
                [tmpdic setValue:imgArray forKey:elementName];
            }
            else if([elementName isEqualToString:@"image"]){
                [imgArray addObject:tmpstr];        
            }
            else if([elementName isEqualToString:@"id"] || [elementName isEqualToString:@"title"]||[elementName isEqualToString:@"description"]){
                [tmpdic setValue:tmpstr forKey:elementName];
            }

        }

        -(void)parserDidEndDocument:(NSXMLParser *)parser{
            NSLog(@"%@",[imgArray description]);
            NSLog(@"%@",[mytblarray description]);
        }
        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //get value like it
        NSString *cellValue = [[mytblarray objectAtIndex:indexPath.row] valueForKey:@"id"];
    }
        - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //get value like it

            NSMutableDictionary *dict=[[NSMutableDictionary alloc]initWithDictionary:
    [mytblarray objectAtIndex:indexPath.row]];
    }
于 2011-10-03T10:17:52.287 に答える