2012-07-02 2 views
0

웹 서버에 매우 큰 xml 파일 (17MB)이 있습니다.이 파일은 지속적으로 업데이트됩니다 (한 달에 한두 번). 사용자가 업데이트를 트리거하면 XML을 가져 와서 핵심 데이터로 구문 분석합니다. 이제 로컬에서 파싱 된 데이터베이스가 최신 상태이거나 서버에 최신 XML이있는 경우 Apps 시작/시작시 확인하고 싶습니다.XML이 생성 된 날짜 가져 오기 NSXMLParser

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

generated dataroot의 속성 만 있습니다.

파일을 빠르고 손쉽게 만들 수있는 방법에 대한 팁은 무엇입니까?

+0

당신이 XML 파일에 "LastupDatedDate"의 태그를 추가하도록 요청 할 수 있습니다

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

희망 날짜 얻기 위해 다음 대리자 메서드를 처리 할 필요가? –

+0

HTTP 헤더에 정보가 없습니까? –

답변

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 
+0

흠, 일부 파일 설명이나 헤더 파일에서 날짜를 읽을 수있는 방법이 있기를 바랬습니다. 그러나 이것은 dataroot-tag가 발견 된 후 파서를 중단 할 때 충분히 빠릅니다. 고마워요. – Amandir

+0

+1 또한 표시하십시오. –

0

생성되거나 수정 된 날짜를 서버에 저장하고 확인하고 저장 한 값과 비교할 수 있습니까? 그렇게하면 XML을 읽지 않아도됩니다. 위양성 (날짜는 변경되었지만 데이터는 그렇지 않음)을 얻을 수는 있지만 false negative (데이터가 변경되었지만 날짜가 없음)가 표시되지 않으므로 많은 양의 처리가 줄어 듭니다.

변경된 것으로 결정되면 XML을 전달하여 날짜를 확인하거나 파일의 특정 위치 (즉, 시작 위치)에있는 경우 파일의 많은 부분을 읽고 검색하면됩니다. 문자열의 경우

0

NSXMPParser를 사용하여 생성 된 시간을 가져올 수 있습니다. 다음을 사용하십시오.

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

[parser setDelegate:self]; 

[parser parse]; 

이렇게하면 대리인 메서드가 호출됩니다. 당신은이