2

店舗のリストを含む XML ファイルがあります。簡易バージョンを以下に示します。私が助けてほしいのは、このデータを Core Data のストレージ用のオブジェクトに移動する最も簡単な方法に関するいくつかの高レベルのアイデアです。キーと値のペアに関する提案が表示されますが、以下の例でわかるように、同じ名前/キーを持つ子要素があり、ストア要素ごとに任意の数の子要素が存在する可能性があります。

これらのオブジェクトは、将来の使用のためにアプリ内に保存する予定です (マップ上の注釈になります)。したがって、各重複フィールドを保存する必要があり、そのうちの 1 つでは十分ではありません。私はそれをコアデータでモデル化する方法を知っています.電話番号エンティティと店舗エンティティがあり、に基づいて2つを関連付けるだけ<store-id>です. 簡単な方法を使用して、他のデータ構造を介して XML から Core Data に移動しようとしています。

XML サンプル:

<stores>
  <store>
   <store-id>1</store-id>
   <city>Dublin</city>
   <phone>011234567</phone>
   <phone>011234566</phone>
   <owner>Joe Bloggs</owner>
  </store>
  <store>
   <store-id>2</store-id>
   <city>Cork</city>
   <phone>019876543</phone>
   <phone>019876542</phone>
   <owner>Joe Bloggs</owner>
  </store>
<stores>

キーと値のペアを使用する方法がある場合は、重複した要素を説明できる方法を教えてください。別の方法があれば、私はすべての耳です。

ありがとう

4

3 に答える 3

5

難しいのは、意味のあるデータ モデルを設計することです。おそらく、店舗用、電話用、所有者用にそれぞれエンティティが必要になるでしょう。Store は電話番号と 1 対多、所有者とは 1 対 1 である必要があります (データを見るだけです)。

データ モデルを配置したら、NSXMLParser または TouchXML などのサード パーティ製ライブラリを使用して XML を解析できます。あなたの要素から始めましょう。そこにあるアイテムごとに、ストア エンティティに基づいてオブジェクトを作成します。要素内の電話ごとに、電話エンティティを作成します。

于 2010-02-19T01:32:54.987 に答える
0

基本的なレベルでは、それほど多くはありません..おそらく最初にモデルを作成するときに、これを指定する場所を実際に理解することはできません..しかし、データストアの選択肢の1つは.plistであり、これXMLのすべての集中的な目的...

たとえば...コアデータモデルから直接引き出されたこの「昔ながらの」plist..

(
Editorial,
News,
Retraction,
"FLAME!",
)

一度実行すると、この XML セットとまったく同じデータです

/usr/bin/plutil -convert xml1 /../input.plist -o /../output.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>Editorial</string>
    <string>News</string>
    <string>Retraction</string>
    <string>FLAME!</string>
</array>
</plist>
于 2011-08-02T13:08:21.973 に答える
0

create-as-you-parse アプローチは、最も単純であるだけでなく、リソース集約型のアプローチが最も少なくなる可能性が高いと思います。ストリーム指向のパーサーを使用して XML を処理し、ストアの解析が終了したらストアを保存できる場合は、一度にメモリに保持する必要があるデータが大幅に少なくなります。

また、属性が本格的なエンティティである必要があるのか​​、ストアの単なるプロパティである必要があるのか​​についても真剣に考えます。たとえば、所有者の名前を地図上に表示する以上のことを行いますか? (そして、はい、その特定のことが単なる例であるというあなたのコメントを見ました。)

残念ながら、Core Data は、リレーションシップではない多値プロパティを実行するための適切な方法を実際には提供していません。(ここでの電話番号は、実際には単なる文字列の配列のように見えます。)しかし、それについての議論については、この SO の質問この cocoa-dev スレッドを参照してください。

于 2010-02-19T03:56:14.710 に答える