创建xml时获取日期NSXMLParser

问题描述:

我在一个不断更新(每月一次或两次)的web服务器上有一个很大的xml文件(17 MB)。当用户触发更新时,我将XML解析为核心数据。现在,如果本地解析的数据库是最新的或者服务器上有新的xml,我想在我的Apps唤醒/启动过程中进行检查。创建xml时获取日期NSXMLParser

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"> 

生成dataroot的属性。

关于如何快速,整洁地创建文件的日期的任何提示?

+0

你可以要求他们在XML文件中添加“LastupDatedDate”的标签? –

+0

HTTP头中没有信息? –

我给你的重要代码。我在.h文件中获取一个字符串变量,并在parse 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 
+0

嗯,我希望有一种方法可以从某些文件描述或头文件中读取日期。但是,当我在找到dataroot-tag之后中止解析器时,这足够快。谢谢:) – Amandir

+0

也标记+1。 –

您是否可以不只是存储并检查服务器上创建或修改的日期,并将其与您存储的值进行比较?这样,如果它是相同的,你甚至不需要费心阅读XML。 你可能会得到一个误报(日期改变,但数据没有),但你不会得到一个错误的否定(数据改变,但日期没有),所以它会减少很多处理。

一旦你决定它已经改变了,你可以通过XML来检查日期,如果它是在文件的特定位置(即开始),只是读取那么多的文件和搜索为字符串

您可以使用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"]; 
} 

希望这有助于