2012-11-07 20 views
0

作爲一個初學者只包含一個節點可能解析XML文件,我看了一下NSXMLParser,並嘗試實現解析器解析XML是通過使用的NSXMLParser

<?xml version="1.0" encoding="UTF-8"?> 
<a>Some text here</a> 

我實現

-(OneNodeXMLParser*)initOneNodeXMLParser{ 

appDelegate = (OneNodeXMLParser*)[[UIApplication sharedApplication]delegate]; 
return self; 
} 

-(void)parser:(NSXMLParser*) parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
NSLog(@"%s",__PRETTY_FUNCTION__,nil); 
if([elementName isEqualToString:@"a"]){ 
    // init some varibles 
} 
NSLog(@"Starting processing"); 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
NSLog(@"%s",__PRETTY_FUNCTION__,nil); 
NSLog(@"%s",string); 
} 

    -(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
NSLog(@"%s",__PRETTY_FUNCTION__,nil); 
NSLog(@"Finishing processing"); 
} 

我應該修改哪些內容才能成功解析文件?

+0

你可以用單個節點解析xml。 –

+0

你能否解釋一下更多的細節,我應該在上面的代碼中修改,我想讓這個文本稍後使用 –

回答

1

在你.h文件中聲明一個NSMutableString *store;

,並更改類似下面的方法:

-(void)parser:(NSXMLParser*) parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"a"]) 
    { 
    store = [[NSMutableString alloc] init]; 
    } 
    NSLog(@"Starting processing"); 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    NSLog(@"%s",string); 
    if (store != nil) 
    { 
    [store appendString:string]; 
    } 
} 

-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    NSLog(@"Finishing processing String : %@", store); 
} 

您可以使用字符串變量store以備將來使用。

+0

是的,這對我很有幫助,非常感謝你 –

+0

愉快:) –