私は、リモートサーバーからデータをロードして(場所ごとにビジネス)、マップ上に表示する必要があるアプリケーションを持っています。サーバーからのフィードはXMLベースです。私はこれをうまく実装しましたが、私の人生をもっと楽にすることができるかどうか疑問に思っています。iOS:XMLデータレコードに簡単にアクセスできますか?
現在、私はGoogleのGDataXMLライブラリを使用しています。バックグラウンドでリモートデータを取得するためのライブラリを実装しています。
完全なデータがロードされたら、私はドキュメントをトラバースして、オブジェクトをNSMutableArrayに追加してオブジェクトを異なるレベルに変換します(私は遅延読み込みを行いたいので、その配列を私のアプリケーションの次のビットに渡してから、私のためにマップを解釈してピン/注釈を付けます。
例XMLデータを(抽象化):
<businesses>
<business>
<name> Fred Bloggs and Co </name>
<address> 123 No Street, Nowhere </address>
<town> Somesville </town>
<county> Someshire </county>
<postcode> XX11 1XX </postcode>
</business>
..... more records but you get the idea .....
</businesses>
例ストレージ・オブジェクト(抽象化)
-- businessrecord.h --
@interface BusinessRecord : NSObject {
NSString *name;
NSString *address;
NSString *town;
NSString *county;
NSString *postcode;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *address;
@property (nonatomic, copy) NSString *town;
@property (nonatomic, copy) NSString *county;
@property (nonatomic, copy) NSString *postcode;
@end
-- businessrecord.m --
@implementation BusinessRecord
@synthesize name, address, town, county, postcode;
@end
右、あなたはおそらく私が手動で各ノード内の各XML要素を解析してることを推測することができるようにそれらを手動でBusinessRecordオブジェクトに転送します。
これは、プロパティごとに異なる場所に3行以上のコード行を記述する必要があるため、特に時間がかかります。あなたのようなもので、各要素にアクセスGDataXMLの下
:
NSArray *businesses = [[[xmlRoot elementsForName:@"businesses"] objectAtIndex:0] elementsForName:@"business"];
NSMutableArray *businessList = [[NSMutableArray alloc] initWithCapacity: businesses.count];
for (int i=0; i<businesses.count; i++) {
GDataXMLElement *business = [businesses objectAtIndex: i];
BusinessRecord *busRec = [[BusinessRecord alloc] init];
busRec.name = [[[bus elementsForName:@"name"] objectAtIndex:0] stringValue];
.... etc for each element ...
[businessList addObject: busRec];
[busRec release];
}
このすべては、非常に長い私にったらしい、これを行うのより良い方法がなければならないようですか?
私が最後にしたいのは、何らかの種類のランダムアクセス配列の "business"レベルのXML内のすべてです。個々の要素を個別に指定する必要はありません。
理想的には、あなただけのように連想配列を含むシーケンシャル配列を持つことができますPHPのようなもの:だから私は、私は特定の要素を解釈し、取得することができますラッパークラスを記述する必要が
$businessList = Array(
Array(
"name" => "Fred Bloggs and Co",
"address" => "123 No Street",
"town" => "Sometown",
"county" => "Someshire",
"postcode" => "XX11 1XX"
)
);
を推測しています(すなわち、要素を列挙してそれらに取り組む)ことができます。
これは何に保存されますか? NSDictionary?
たぶん(擬似コード)のようなもの:
NSArray *businesses = [[[xmlRoot elementsForName:@"businesses"] objectAtIndex:0] elementsForName:@"business"];
NSMutableArray *businessList = [[NSMutableArray alloc] init];
[xmlBreakerUpper breakUpXMLAtElement: businesses addToMutableArray: &businessList];
誰にGDataXMLの経験を持っており、私はまばらなドキュメントに従うことができないとして列挙で私を助けることができます。
私はこの段階でGDataXMLに完全には結びついていませんが、もっと良い方法があれば、私は2つのクラスしか考えていません。
私はサーバの出力を制御していますが、クライアントは他のデータアクセスAPIのためにXMLの設定を持っています。後で実装することが望ましいかもしれません。
この段階でXMLをサーバーに戻す必要はありません。要求は現在HTTP GETベースですが、後でフォームに記入するとPOSTになる可能性があります。
すべてのヘルプやgreatfully受けた右方向に押し込みます。