繁体   English   中英

问题:在iOS的Objective-C / Cocoa项目中解析XML文件

[英]Problem: Parsing XML File in Objective-C/Cocoa Project for iOS

经过几天寻找解决我的错误的解决方案之后,我想与您分享整个问题。 也许有人有一个更好的主意来解决这个问题。

我的项目使用TabViewController在视图之间切换。 对于每个Tabview,我都加载一个单独的类File以使其更加清晰。

我需要查看的所有内容都来自XML文件。 我通过网址获取。 结构如下:

<?xml version="1.0"?>
<rss version="2.0">
    <channel>
        <Slice id=1>
            <image>www.testurl.com/test.jpg</img>
            <title>Sample Title #1</title>
            <text>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy</text>
        </Slice>

        <Slice id=2>
            <image>www.testurl.com/test2.jpg</img>
            <title>Sample Title #2</title>
            <text>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy</text>
        </Slice>
    </channel>
</rss>

我为每个视图分别获得了这样的文件,其中包含我要在视图中显示的网站内容。

我尝试了一些XML解析教程,找到了一种解析文件并将其显示在TableView中的方法。 它工作正常,但是当我尝试在我的Project中实现文件时,使用委托存在一些问题。

我已经在我的项目中有一个委托,负责管理导航。 现在,我有了第二个委托,负责管理XML解析器,但是我仍然不知道如何使第二个委托在View中工作。

我发现的每个教程都使用Projects Delegate,但是如果我已经拥有一个Delegate并只想在我的Project中添加XML Parser东西该怎么办。

我发疯了,因为没有找到与我的问题有关的任何东西,从而在Google中入侵了关键字。 这是我的求救电话。 = D

我的问题:有什么简单的方法可以向项目中添加动态xml解析器,从而在将URL发送给解析器时为我提供一个包含其内容的数组? 我只想在ViewController中定义URL并从XML获取内容。

希望你理解我的问题。 我希望能为您提供帮助的所有答案。

嗯...。也许您对代理模式感到困惑。

委托只是一个接收消息而不是另一个对象的对象。 将其视为回调机制。

我的建议是创建一个单独的类来解析XML文件,如下所示:

@interface  MyXMLParser : NSObject<NSXMLParserDelegate>

此类具有NSMutableArray结果和一个parse方法。

解析方法将如下所示:

-(void) parse:(NSString *)xmlFilePath
{
  self.results  = [[NSMutableArray alloc] init];  

  NSURL* xmlURL = [NSURL fileURLWithPath:xmlFilePath];
  NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
  parser.delegate = self;  
  [parser parse];
  [parser release];
}

在此类中,您还需要实现委托方法。 这些方法将在[parser parse]调用中被调用,一次针对xml文件中找到的每个元素:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *) qualifiedName attributes:(NSDictionary *)attributeDict
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError 

在这些方法内部,您需要“理解”获得的元素并将它们存储在结果数组中。

您可以像这样使用此解析器

MyXMLParser* parser = [[MyXmlParser alloc] init];
[parser parse:@"myfile.xml"]
NSLog(@"%@", parser.results);
[parser release];

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM