我有一个XML,它的结构如下:
<data>
<books>
<item>
<title>book1</title>
<author>author1</author>
</item>
<item>
<title>book2</title>
<author>author2</author>
</item>
</books>
<magazines>
<item>
<title>Mag1</title>
<author>author1</author>
</item>
</magazines>
<journals>
<item>
<title>Journal1</title>
<author>author1</author>
</item>
<item>
<title>Journal2</title>
<author>author2</author>
</item>
</journals>
</data>我使用表视图来显示每个类别的项目。我计划有一个表视图与列书籍,杂志和期刊,在他们上点击应该只显示他们下面的项目。也就是说,如果我单击books,它应该只显示图书条目。
我有一个用于xml解析的代码
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *) elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqual:@"books"]) {
flag=1;
}
if ([elementName isEqual:@"title"]) {
NSLog(@"found title!");
parsedString = [[NSMutableString alloc] init];
}
if ([elementName isEqual:@"author"]) {
NSLog(@"description found");
parsedString = [[NSMutableString alloc] init];
}
}和在
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if (flag==1){
if ([elementName isEqual:@"title"]) {
[headlines addObject:parseString];
[parseString release];
parseString = nil;
}
if ([elementName isEqual:@"author"]) {
[authors addObject:parsedString];
[parseString release];
parseString = nil;
flag=2;
}
}
}但这只获得了书籍的第一个条目,而没有其他内容。有没有一种方法可以只在和标签之间进行解析,而不是设置标志?
谢谢。
发布于 2011-11-09 09:08:29
它只获取第一个项目的原因是,当您看到author标记的end元素时,将flag设置为2。我怀疑,如果您在book标记的end元素中更新此标记,您将更接近您想要的内容,如下所示:
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if (flag==1){
if ([elementName isEqual:@"title"]) {
[headlines addObject:parseString];
[parseString release];
parseString = nil;
}
if ([elementName isEqual:@"author"]) {
[authors addObject:parsedString];
[parseString release];
parseString = nil;
}
if ([elementName isEqual:@"books"]) {
flag=2;
}
}
}发布于 2011-11-09 08:37:48
只需在book标记结束时取消解析:
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqual:@"books"]) {
[parser abortParsing];
}
....
}https://stackoverflow.com/questions/8058392
复制相似问题