0

Webサーバー上にかなり大きなxmlファイル(17 MB)があり、これは常に更新されています(月に1〜2回)。ユーザーが更新をトリガーしたときに、XMLを取得してCoreデータに解析します。ここで、アプリのウェイクアップ/起動中に、ローカルで解析されたデータベースが最新であるかどうか、またはサーバーに新しいxmlがあるかどうかを確認したいと思います。

xmlは、MS Officeを介してIT企業以外の企業によって作成されているため、彼らがxmlに多くの変更を加えることは期待できません。今私は持っているだけです

<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="someXML.xsd" generated="2012-06-28T12:53:12">

datarootの生成された属性。

ファイルが作成された日付をすばやくきちんと取得するためのヒントはありますか?

4

3 に答える 3

1

私はあなたに重要なコードを与えています。.hファイルの文字列変数を取得し、構文解析のparsedidstartelementメソッドで文字列を初期化しています。以下のコードを確認してください。

 @interface TestViewController: UIViewController <NSXMLParserDelegate>  {
        NSString *generatedDate;
    }
    @end

#import "TestViewController.h"

@implementation TestViewController

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    if ( [elementName isEqualToString:@"dataroot"] ) {
        generatedDate = [[NSString alloc]initWithFormat:@"%@",[[attributeDict objectForKey:@"generated"] retain]];
        }
   }
@end
于 2012-07-02T09:41:13.397 に答える
0

サーバーに作成日または変更日を保存して確認し、保存した値と比較することはできませんか?そうすれば、それが同じであれば、XMLをわざわざ読む必要さえありません。誤検知(日付は変更されたがデータは変更されていない)は発生する可能性がありますが、誤検知(データは変更されたが日付は変更されていない)は発生しないため、多くの処理が削減されます。

変更されたと判断したら、XMLを渡して日付を確認するか、ファイルの特定の場所(つまり、先頭)にあるかどうかを確認し、ファイルのその部分を読み取って文字列を検索します。

于 2012-07-02T09:32:13.687 に答える
0

NSXMPParser を使用して、生成された時間を取得できます。以下を使用

NSXMLParser *parser  = [[NSXMLParser alloc] initWithData:yourXMLData];

[parser setDelegate:self];

[parser parse];

これにより、デリゲート メソッドが呼び出されます。日付を取得するには、次のデリゲート メソッドを処理する必要があります

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
     NSString *generatedDate = [attributeDict objectForKey:@"generated"];
}

お役に立てれば

于 2012-07-02T09:45:25.693 に答える