【问题标题】:Get date when a xml was created NSXMLParser获取创建 xml 的日期 NSXMLParser
【发布时间】:2012-07-02 16:59:15
【问题描述】:

我在网络服务器上有一个相当大的 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">

dataroot 的生成属性。

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

【问题讨论】:

  • 能否请他们在xml文件中添加“LastupDatedDate”标签?
  • HTTP 标头中没有信息?

标签: iphone xml xcode ipad nsxmlparser


【解决方案1】:

你能不能只存储和检查服务器上的创建或修改日期,并将其与你存储的值进行比较?这样,如果它是相同的,您甚至不需要费心阅读 XML。 您可能会得到误报(日期已更改但数据未更改),但不会得到误报(数据已更改但日期未更改),因此会减少大量处理。

一旦你决定它已经改变,你可以传递 XML 来检查日期,如果它在文件的特定位置(即开头),只需读取文件的大部分并搜索字符串

【讨论】:

    【解决方案2】:

    我给你重要的代码。我在 .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
    

    【讨论】:

    • 嗯,我希望有一种方法可以从某些文件描述或头文件中读取日期。但是,当我在找到 dataroot-tag 后中止解析器时,这已经足够快了。谢谢你:)
    【解决方案3】:

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2013-03-11
      • 1970-01-01
      • 2016-12-09
      • 2012-12-15
      • 2019-11-28
      相关资源
      最近更新 更多