gpt4 book ai didi

ios - XML 到 Xcode 解析

转载 作者:行者123 更新时间:2023-11-29 10:33:55 26 4
gpt4 key购买 nike

我在 Xcode 中将数据从 XML 文件解析到我的应用程序。它正在解析,但第一个值未显示在 UITableView 中,请帮忙。让我向您展示我的代码。

View Controller :

- (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 文件

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

现在在输出中我可以看到所有条目但看不到第一个的标题“Eggs”

最佳答案

首先,您不应该在 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;
}
}

关于ios - XML 到 Xcode 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com