以下の XML を参照してください。
http://sosmoths.com/.xml/moths.xml
この XML には複数の画像名があり、それぞれのコントローラーで異なるタイトル (4 つのタイトルがあります) を表示する必要があります。私は 4 つのコントローラを持っており、それぞれの蛾の値を複数の画像の値とともに異なるコントローラに表示する必要があります。どうすればよいですか?
オブジェクトは1つでも4つでも作れますか?
私はそれで少し混乱しています、助けてください。
以下の XML を参照してください。
http://sosmoths.com/.xml/moths.xml
この XML には複数の画像名があり、それぞれのコントローラーで異なるタイトル (4 つのタイトルがあります) を表示する必要があります。私は 4 つのコントローラを持っており、それぞれの蛾の値を複数の画像の値とともに異なるコントローラに表示する必要があります。どうすればよいですか?
オブジェクトは1つでも4つでも作れますか?
私はそれで少し混乱しています、助けてください。
この XML には複数の画像名があり、それぞれのコントローラーで異なるタイトル (4 つのタイトルがあります) を表示する必要があります。私は 4 つのコントローラを持っており、それぞれの蛾の値を複数の画像の値とともに異なるコントローラに表示する必要があります。どうすればよいですか?
これは XML 解析の問題ではなく、アプリ アーキテクチャの問題のように思えます。
その XML は基本的にいくつかのデータを記述し、そのデータは通常、アプリケーション内のオブジェクトによって表されます。XML をローカルの CoreData ストア (メモリ内かディスク上かは関係ありません) に解析し、管理対象オブジェクトを通常どおりに表示する CoreData ベースのソリューションを使用できます。
または、それが典型的なデータ セットの代表であると仮定すると、それを解析して独自の手巻きオブジェクト (または、辞書や配列) に変換し、そこから表示することもできます。
SO で (および Google 経由で) XML を解析することについては、数多くの質問があります。
あなたの質問の 2 番目の部分は解決されていません。基本的に、アプリを model-view-controller パターンに適切にレイヤー化する必要があります。モデル レイヤーは XML を解析し、データを表すオブジェクト グラフを作成します。各コントローラーは、その単一のモデルへの参照を持ちます。
アプリが読み取り専用である限り、これは問題なく機能します。さまざまなコントローラーがオブジェクト グラフも編集することが予想される場合は、変更の伝達を処理する必要があるため、もう少し複雑にする必要があります (ここで CoreData が活躍します。これにより、変更管理、伝達、検証が行われます)。 、比較的簡単に取り消すことができます)。
TBXML を使用すると、xml を簡単に解析でき、使用するオブジェクトに変換されます。
http://www.tbxml.co.uk/TBXML/TBXML_Free.html
また、libxml2 は簡単に解析できることも特徴です。
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]];
}