0

我在网络服务器上有一个非常大的 xml 文件(17 MB),它会不断更新(每月一次或两次)。当用户触发更新时,我将 XML 解析为核心数据。现在我想在我的应用程序唤醒/启动期间检查本地解析的数据库是否是最新的,或者服务器上是否有更新的 xml。

xml 是由非 IT 公司通过 MS Office 创建的,所以我真的不能指望他们对 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">

生成数据根的属性。

有关如何以快速简洁的方式获取文件创建日期的任何提示?

4

3 回答 3

1

我给了你重要的代码。我在 .h 文件中获取一个字符串变量,并在解析的 didstartelement 解析方法中初始化该字符串。检查下面的代码。

 @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 回答