2015-01-21 3 views
1

XML 파일의 데이터를 Xcode의 내 응용 프로그램으로 파싱하고 있습니다. 그것은 구문 분석하지만 첫 번째 값이 표시되지 않습니다 UITableView 도와주세요. 내 코드를 알려주지.XML to Xcode 구문 분석

의 ViewController : 내가 모든 항목을 볼 수 있습니다 출력 지금

<?xml version="1.0"?> 
<data> 
     <item><title>Eggs</title> 
     <link>http://url/category.php?cat_id=15</link></item> 
     <item><title>Bakery</title> 
     <link>http://url/category.php?cat_id=15</link></item> 
     <item><title>Bread</title> 
     <link>http://url/category.php?cat_id=16</link></item> 
     <item><title>Cakes, Pies Patisserie</title> 
     <link>http://url/category.php?cat_id=17</link></item> 
     <item><title>Specialty Breads</title> 
     <link>http://url/category.php?cat_id=119</link></item> 
</data> 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    rssOutputData = [[NSMutableArray alloc]init]; 
    NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://URL/mycategories.xml"]]; 
    xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData]; 
    [xmlParserObject setDelegate:self]; 
    [xmlParserObject parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"item"]){ 
     xmlStringFileObject =[[XMLStringFile alloc]init]; 
    } 
} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [nodecontent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 
    NSLog(@"node content = %@",nodecontent); 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"title"]){ 
     xmlStringFileObject.xmltitle=nodecontent; 
    } 
    else if([elementName isEqualToString:@"link"]){ 
     xmlStringFileObject.xmllink=nodecontent; 
    } 
    if([elementName isEqualToString:@"item"]){ 
     [rssOutputData addObject:xmlStringFileObject]; 
     xmlStringFileObject = nil; 
    } 
    nodecontent=[[NSMutableString alloc]init]; 
} 

그리고 내 XML 파일은 그러나 예, 그것은 때문에 첫 번째의 제목 "계란"

+0

당신이 나에게 –

+0

가 중단 점을 넣어 통해 UR URL을 제공 할 수 있습니다, 당신이 나중에 nodecontent – weso

답변

1

첫째, 당신은 didEndElement 방법에 nodecontent를 할당해서는 안 : 당신의 구문 분석이 끝날 때 할당 된 개체를해야합니다.

이 방법을 시도해보십시오

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    rssOutputData = [[NSMutableArray alloc]init]; 
    NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://URL/mycategories.xml"]]; 
    xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData]; 
    [xmlParserObject setDelegate:self]; 
    [xmlParserObject parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"item"]){ 
     xmlStringFileObject =[[XMLStringFile alloc]init]; 
    } else { 
    nodecontent = [[NSMutableString alloc] init]; 
    } 
} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [nodecontent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"item"]){ 
     [rssOutputData addObject:xmlStringFileObject]; 
     xmlStringFileObject = nil; 
    } else if([elementName isEqualToString:@"title"]){ 
     xmlStringFileObject.xmltitle= nodecontent; 
     nodecontent = nil; 
    } 
    else if([elementName isEqualToString:@"link"]){ 
     xmlStringFileObject.xmllink= nodecontent; 
     nodecontent = nil; 
    } 
} 
1

하지 당신은 NSXMLParser 대리자 방법 didEndElement:nodecontent 문자열을 초기화하고 있습니다.

파서가 첫 번째 객체를 찾으면 nodecontent 문자열을 초기화하고 첫 번째 객체는 문자열을 추가하지 않습니다. 왜냐하면 그 시간을 초기화하지 않고 두 번째 객체에 대해 나머지는 모두 첫 번째 이후에 초기화되므로 nodecontent에 추가됩니다. 요구.

XML 파일을 구문 분석하기 전에을 viewDidLoad() 메소드에 할당하는 것이 좋습니다.

nodecontent=[[NSMutableString alloc]init];- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 방법에서 제거하십시오.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    nodecontent=[[NSMutableString alloc]init]; 

    rssOutputData = [[NSMutableArray alloc]init]; 
    NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://URL/mycategories.xml"]]; 
    xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData]; 
    [xmlParserObject setDelegate:self]; 
    [xmlParserObject parse]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"title"]){ 
     xmlStringFileObject.xmltitle=nodecontent; 
    } 
    else if([elementName isEqualToString:@"link"]){ 
     xmlStringFileObject.xmllink=nodecontent; 
    } 
    if([elementName isEqualToString:@"item"]){ 
     [rssOutputData addObject:xmlStringFileObject]; 
     xmlStringFileObject = nil; 
    } 
} 
+0

내가 그 눈치 didnt한다 감사 초기화 생각합니다. :) –