如何将XML文件数据加载到UITableView?

时间:2011-08-03 15:31:16

标签: objective-c xml uitableview

我正在从服务器检索XML文档,并希望在我的应用程序中的UITableView中显示它。到目前为止,我有以下代码:

@implementation textxmlViewController

@synthesize tableviews;

-(void)viewDidLoad{
    [super viewDidLoad];

    NSURL *url = [[NSURL alloc] initWithString:@"http://theserver.com/demo.xml"];
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    [xmlParser setDelegate:self];
    BOOL success = [xmlParser parse];

    if(success)
        NSLog(@"success");
    else
        NSLog(@"Error");
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    NSLog(string);
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if (qName) {
        elementName = qName;
    }
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
        attributes:(NSDictionary *)attributeDict {
    if (qName) {
        elementName = qName;
    }
    if ([elementName isEqualToString:@"text"]) {
    }
}

我在这个视图中已经有了一个UITableView,我的问题是如何在表格视图中显示XML的内容?

我的XML数据如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Answers>
    <Answer>
        <Result>it's good</Result>
        <Evaluate>can you tell me why?</Evaluate>
    </Answer>
    <Answer>
        <Result>about 5 hours</Result>
        <Evaluate>it's too long</Evaluate>
    </Answer>
</Answers>

那我怎么办呢?感谢

2 个答案:

答案 0 :(得分:0)

这取决于您希望如何显示信息。至少你应该实现cellForRowAtIndexPath:来返回要显示的UITableViewCell。

根据您的XML结构,您可以获得答案单元格,每个单元格都有两个UITextField来显示结果并进行评估。

请查看http://adeem.me/blog/2009/05/19/iphone-programming-tutorial-part-1-uitableview-using-nsarray/获取教程。

答案 1 :(得分:0)

我建议使用另一个XML解析器而不是使用NSXMLParser。 Ray Wenderlich写了一篇关于iPhone(iOS)上不同XML解析可能性的好文章:http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

我认为使用基于DOM的XML解析器会更容易。您可以使用indexPath直接从解析的xmlData中获取数据。

例如:如果你使用GDataXML,你只需要调用方法

+ (GDataXMLElement *)elementsWithName:(NSString *)name;

使用name ='Answers'返回节点以获取所有答案。

在这个GDataXMLElement上调用方法

 - (NSArray *)elementsForName:(NSString *)name;

name ='Answer',它为您提供NSArray的所有答案。

您可以使用[answersArray count]返回numberOfRowsInSection,将此数组用作UITableView的数据源。在cellForIndexPath方法中,通过调用

获取答案的GDataXMLElement
GDataXMLElement  * answerElement = [answersArray objectAtIndex: indexPath.row];

只需解析元素'name'和'value'的answerElement,即可在UITableView中显示数据。