解析使用NSXML XML为iPhone
问题描述:
我有具有这样的结构的XML:解析使用NSXML XML为iPhone
<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>
我使用的是表视图,以显示每个类别的项目。我打算用列表书籍,杂志&和点击它们应该只显示它们下面的项目。也就是说,如果我点击书籍,它应该只显示书籍条目。
我有这样的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;
}
}
}
但这只能得到的书,没有其他的第一项。 而不是设置标志有没有办法解析<书籍>和 < /书籍>标签?
谢谢。
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqual:@"books"]) {
[parser abortParsing];
}
....
}
答
只是取消解析。我怀疑你会得到更接近你想要什么,如果你更新的图书标签结束元素此标志,如下所示:
- (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;
}
}
}
如果你想拿到书部分,这恰好这种做法只会工作如在示例中那样在XML中是第一个。但是,如果你想用相同的逻辑来检索“杂志”和“杂志”版块,那么它就没有多大帮助。 –
我现在试过了。点击我的tableview中的单元格会出现一个显示作者姓名的屏幕。它工作正常,但当我回到表视图并再次单击该项目时,它崩溃。 基本上,我试图做的只是解析书中的标签,只解析杂志内的标签等。所以,如果我解析杂志,它不应该解析书籍和杂志下的标签。 – Bharat
@蒂姆迪恩,我知道。 – Max