解析属性XML
问题描述:
我是iOS应用程序开发新手,遇到问题。解析属性XML
XML
<?xml version="1.0" encoding="UTF-8"?>
<Books>
<Book id="1">
<title_1>Circumference</title_1>
<author>Nicholas Nicastro</author>
<summary>Eratosthenes and the Ancient Quest to Measure the Globe.</summary>
</Book>
<Book id="2">
<title_1>Copernicus Secret</title_1>
<author>Jack Repcheck</author>
<summary>How the scientific revolution began</summary>
</Book>
<Book id="3">
<title_1>Angels and Demons</title_1>
<author>Dan Brown</author>
<summary>Robert Langdon is summoned to a Swiss research facility to analyze a cryptic symbol seared into the chest of a murdered physicist.</summary>
</Book>
<Book id="4">
<title_1>Keep the Aspidistra Flying</title_1>
<author>George Orwell</author>
<summary>A poignant and ultimately hopeful look at class and society, Keep the Aspidistra Flying pays tribute to the stubborn virtues of ordinary people who keep the aspidistra flying.</summary>
</Book>
</Books>
CODE
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"Books"])
{
data_array = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Book"])
{
bookID= [[attributeDict objectForKey:@"id"]integerValue];
NSLog(@"Reading id value :%d",bookID);
//NSLog(@"Processing Element: %@",elementName);
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(!test_string)
{
test_string = [[NSMutableString alloc] initWithString:string];
}
else
{
[test_string appendString:string];
}
//NSLog(@"Processing Value: %@",test_string);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"Books"])
return;
if ([elementName isEqualToString:@"Book"])
{
[data_array addObject:test_string];
}
else
test_string = nil;
}
如果我按照这个方法,然后它会跳过第一本书,并只显示最后的三本书。
如果我把test_string=nil
在if块,而不是别的话,就说明它的作者姓名以及
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"Books"])
return;
if ([elementName isEqualToString:@"Book"])
{
[data_array addObject:test_string];
test_string = nil;
// data_array = nil;
}
}
另外我也得到一些空间时,它显示在我的表视图。
答
更改didStartElement:
方法,如:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"Books"])
{
data_array = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Book"])
{
bookID= [[attributeDict objectForKey:@"id"]integerValue];
test_string = nil;
NSLog(@"Reading id value :%d",bookID);
}
else if([elementName isEqualToString:@"title_1"])
{
test_string = [[NSMutableString alloc] init];
}
}
更改didEndElement:
方法,如:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"Books"])
return;
if ([elementName isEqualToString:@"title_1"])
{
[data_array addObject:test_string];
test_string = nil;
}
}
答
在这里你可以看到一个良好的链接Attributed XML Parsing
You Can see the XML file .it looks similar your XML file教程。 在本教程中,他们将数据存储在Model Object (NSObject Class)
中。 而且每当他们需要时Data
他们只是从Model Class
获得数据。
我希望你可能会得到上述一些帮助的形式....
仍然有问题? –
谢谢一个男人!万分感谢!!! 工作顺利! –
@DeepakKhiwani:很高兴。感谢您的评论:) –