4

だから私は大きなXMLファイル(40MB)をスキャンしたいのですが、私が理解している限り、メモリフットプリントを減らすためにNSXMLParserを使用する必要があります。各曲のいくつかの点をチェックし、すべての基準を満たしている場合は、その曲を新しい xml ファイルに書き込みます。

NSXMLParser を使用してロードし、ファイルの基本的な読み取りを実行できます。では、各曲を一時変数として保存するにはどうすればよいのでしょうか? そして、どのようなオブジェクトとして保存する必要がありますか (変更可能なものを想定しているため、ファイルに書き込む前にファイルに曲を追加し続けることができます)。

    <key>Tracks</key>
<dict>
    <key>11072</key>
    <dict>
        <key>Track ID</key><integer>1107</integer>
        <key>Name</key><string>Kids with Guns (Hot Chip Remix)</string>
        <key>Artist</key><string>Gorillaz</string>
        <key>Album</key><string>D-Sides</string>
        <key>Genre</key><string>Britpop</string>
        <key>Kind</key><string>MPEG audio file</string>
        <key>Size</key><integer>844299</integer>
        <key>Total Time</key><integer>42971</integer>
        <key>Disc Number</key><integer>2</integer>
        <key>Disc Count</key><integer>2</integer>
        <key>Track Number</key><integer>6</integer>
        <key>Track Count</key><integer>9</integer>
        <key>Year</key><integer>2007</integer>
        <key>Date Modified</key><date>2008-10-30T02:44:58Z</date>
        <key>Date Added</key><date>2007-12-25T21:54:16Z</date>
        <key>Bit Rate</key><integer>153</integer>
        <key>Sample Rate</key><integer>44100</integer>
        <key>Comments</key><string> __FIXED__U74A0ECA</string>
        <key>Play Count</key><integer>1</integer>
        <key>Play Date</key><integer>3292750639</integer>
        <key>Play Date UTC</key><date>2008-05-04T20:57:19Z</date>
        <key>Skip Count</key><integer>1</integer>
        <key>Skip Date</key><date>2008-02-09T06:17:30Z</date>
        <key>Artwork Count</key><integer>2</integer>
        <key>Persistent ID</key><string>74A0ECAC8D</string>
        <key>Track Type</key><string>File</string>
        <key>Location</key><string>file://xxxxx/x/iTunes/Music/Gorillaz/D-Sides/2-06%20Kids%20with%20Guns%20(Hot%20Chip%20Remix).mp3</string>
        <key>File Folder Count</key><integer>5</integer>
        <key>Library Folder Count</key><integer>1</integer>
    </dict>
4

1 に答える 1

1

好きな種類のオブジェクトを使用してください。辞書を使用するか、自分にとって便利な構造を反映し、抽出するデータの構造を反映する独自のクラスを作成することができます。明らかなテクニックは、最上位のパーサー デリゲートに NSMutableArray のプロパティがあるため、取得したものを追加するだけで、次のコードで行っているように、呼び出し元が結果の値を取得できるというものです。

NSURL* url = // obtain xml URL
NSXMLParser* parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
MyPeopleParser* people = [[MyPeopleParser alloc] init];
[parser setDelegate: people];
[parser parse];

MyPeopleParser には、 と呼ばれる人々の NSMutableArray がありpeopleます。これで、そのプロパティの値を取得できます ( people.people、申し訳ありません)。配列は Person オブジェクトでいっぱいになりました。しかし、それはすべて実装の詳細にすぎません。NSXMLParser の使用方法を理解している場合は、ゲームよりもはるかに先を行っているため、あとは大変なことになります。

ファイルへの書き込みの意味がよくわかりません。XMLファイルです。ただし、私の場合は、Person クラスをアーカイブ可能にするので、Person オブジェクトの NSArray を .plist としてディスクに直接書き込むことができます。

于 2012-12-19T03:36:44.340 に答える