在寻找解决我的错误的解决方案几天后, 我想与你分享整个问题。也许有人有更好的想法来解决这个问题。
我的项目使用 TabViewController 在 View 之间切换。 对于每个 Tabview,我加载一个单独的类文件以使其更加清晰。
我需要的 View 的所有内容都来自 XML 文件。我通过 URL 获取它们。 结构如下所示:
<?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>
我为每个 View 单独获取这样一个文件,其中包含我想要在 View 中显示的网站内容。
我尝试了一些 xml 解析教程,并找到了一种解析我的文件并将其显示在 TableView 中的方法。它工作正常,但是当我尝试在我的项目中实现这些文件时,使用委托(delegate)会出现几个问题。
我的项目中已经有一个委托(delegate)来管理导航。现在我有第二个委托(delegate),管理 XML 解析器,但我仍然不知道如何使第二个委托(delegate)在我的 View 中工作。
我发现的每个教程都使用项目委托(delegate),但如果我已经有了一个委托(delegate)并且只想在我的项目中添加 XML 解析器,该怎么办?
我对在 Google 中破解关键字感到疯狂,但没有找到与我的问题相关的任何内容。这是我的求助电话。 =D
我的问题: 有没有什么简单的方法可以将动态 xml 解析器添加到我的项目中,当我将 URL 发送到解析器时,它会返回一个包含内容的数组? 我只想在 ViewController 中定义 URL 并从 XML 中获取内容。
希望你理解我的问题。我将不胜感激每一个可以帮助我的答案。
最佳答案
嗯...也许您的困惑在于委托(delegate)模式。
委托(delegate)只是一个代替另一个对象接收消息的对象。将其视为回调机制。
我的建议是创建一个单独的类来解析 XML 文件,如下所示:
@interface MyXMLParser : NSObject<NSXMLParserDelegate>
此类有一个 NSMutableArray 结果和一个解析方法。
解析方法将如下所示:
-(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];
}
在此类中,您还需要实现委托(delegate)方法。这些方法将在 [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];
希望对您有所帮助。
关于objective-c - 问题: Parsing XML File in Objective-C/Cocoa Project for iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4153340/