- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在解析一个 XML 文件并填充一个 TableView 。 XML 的格式如下:
<article>
<title>Title 1</title>
<last-modified>MM/DD/YYY</last-modified>
</article>
...
我目前使用 NSMutableString
收集所有文章标题并将字符串附加到 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString * )string
方法。然后在适当的时候,我将 articleTitle
添加到包含所有文章标题的 NSMutableArray
中,并按照您的预期从数组中填充表格。
但是,现在我想切换到使用具有副标题的表格 View 单元格(我想将上次修改日期作为 detailTextLabel
并将标题作为 textLabel
)。通过将解析分为几种方法(即 2 个 parser
方法和 foundCharacters
方法),我不确定应该如何“收集”数据,并根据该数据填充表格。
最好的方法是什么?我能否以某种方式只填充 NSDictionary 或其他东西,然后在构建表格单元格时按键检索项目?
我似乎无法找出处理此问题的最佳方法。
提前致谢!
最佳答案
如果你愿意,你可以使用 DOM 解析器,它可能会让你的生活更轻松一些,但如果出于某种原因你想坚持使用 NSXMLParser,请继续阅读。
您希望您作为委托(delegate)(实现 NSXMLParserDelegate 的对象)提供给解析器的对象在传递数据时基本上积累数据。
经常被忽视的重要细节:对于各种标签的“内容”,您实际上可以收到对 parser:foundCharacters:
的多次调用。绝对没有要求解析器一次把它全部交给你。如果它愿意,它可以一次向您发送一个字符,您必须妥善处理它。
以下假定以下 ivars:
NSMutableArray articles_;
NSMutableString currentCharacters_;
Article currentArticle_; // Article has title and lastModified properties.
下面是委托(delegate)如何实现一些相关消息的示例(以下代码显然没有错误处理):
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"article"]) {
NSAssert(currentArticle_ == nil, @"Uh oh! Bad XML!");
currentArticle_ = [[Article alloc] init];
return;
}
if ([elementName isEqualToString:@"title"]) {
NSAssert(currentCharacters_ == nil, @"Uh oh! Bad XML!");
currentCharacters_ = [[NSMutableString alloc] init];
return;
}
if ([elementName isEqualToString:@"last-modified"]) {
NSAssert(currentCharacters_ == nil, @"Uh oh! Bad XML!");
currentCharacters_ = [[NSMutableString alloc] init];
return;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"article"]) {
[articles_ addObject:currentArticle_];
[currentArticle_ release], currentArticle_ = nil;
return;
}
if ([elementName isEqualToString:@"title"]) {
currentArticle_.title = currentCharacters_;
[currentCharacters_ release], currentCharacters_ = nil;
return;
}
if ([elementName isEqualToString:@"last-modified"]) {
[currentArticle_ setLastModifiedWithString:currentCharacters_];
[currentCharacters_ release], currentCharacters_ = nil;
return;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[currentCharacters_ appendString:string];
}
关于iphone - 如何使用 NSXMLParser 解析多个 XML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4119086/
我在 NSXMLParser 中崩溃了 * Terminating app due to uncaught exception 'NSInternalInconsistencyException',
我有 NSXMLParser 问题,我尝试了 iOS8 NSXMLParser crash这个话题,但我真的没有得到解决方案。 我正在创建另一个 NXSMLParser 委托(delegate)并将其
我目前正在尝试使用外部已解析实体引用来解析包含另一个 XML 的 XML。但是,NSXMLParser 会引发错误,而不是解析包含的 XML。 xml 看起来有点像这样: ]>
我正在使用 NSXMLParser 来解析此 XML:http://itunes.apple.com/gb/rss/topsongs/limit=50/explicit=true/xml 。我正在尝试
NSXMLParser 是什么样的解析器? 是 dom 解析器还是 sax 解析器。 有多少个解析器? 最佳答案 它是一个 SAX 解析器。有许多可用于 iOS 的 DOM XML 解析器,我见过的最
我有以下泄漏的代码。 Instruments 表示,泄漏的是 rssParser 对象。我“刷新”了 XML 提要,它运行了该 block 并且发生了泄漏...... 文件.h @interface
如何将本地路径传递给NSXMLParser 像这样 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:storeP
我使用从互联网获取的可变数据初始化 NSXMLParser。我想知道解析器是否在释放时释放它,或者我必须在解析后释放它? 谢谢 最佳答案 Cocoa 使用“这不是我的问题”来比喻内存管理。 如果将某些
我有以下 XML(为 iPhone 开发一个应用程序): 00070431 John Doe ... 如何仅检索其中一个属性的值,例如属性 name="given_name"的值“John”? 感
下面是 MREntitiesConverter 对象的 @interface,我使用 NSXMLParser 从字符串中剥离所有 html 标签。 @interface MREntitiesConve
我想编写一个 NSXMLParser,我在 NSString(已编码)中有数据。 如果我将 NSString 放入 NSLog,它会给出我需要的正确行。但是,当我想使用来自 NSString 的数据启
这与我之前的问题类似。我没有得到答案,也许通过改变问题我可能会得到答案。 这是我的解析代码: -(void) parser:(NSXMLParser *) parser didStartElemen
我正在尝试解析一些简单的东西,但我不知道该怎么做..我已经解析了之前有一些 xml,但这个结构没有任何内容,所以我有点迷失。 这是 xml。
我正在我的应用程序中解析 XML 文件,最奇怪的事情发生了。它在多个元素之后停止,没有完成该元素,但解析方法仍然返回成功。我感觉某个地方有一个错误的角色,但无法弄清楚。有谁知道为什么它在解析过程中停止
我想解析 [description] [p] blah blah [/description] [/p] 中包含的描述 Jon Greene named associate director
我正在尝试从 xml 网络源获取内容列表。我正在使用 NSXMLParser atm。 代码如下: - (void)main { self.workingArray = [NSMutableA
我有这样的xml数据 dendritical Empty மரம
我刚刚阅读了一个关于 nsxmlparsing 的不同问题的答案。其中有人说你应该使用 self。更好的内存管理符号...这是什么意思? 我在初始化字典时遗漏了这个,我应该把它放进去吗?它有多大帮助或
我在 XML 中有一行包含 % 符号。但是 NSXMLParser 也改变了一些数字,如下所示 2013-11-16 01:08:07.102 ECP[46386:a0b] string is Inc
我正在尝试解析一个 xml 文件(下面的链接)以获取所有带有标签的文本。我能够做到这一点,但解析器忽略了以破折号 (-) 结尾的行并仅将其替换为破折号(请参见下面的示例),并且一些带有说话标记的说话标
我是一名优秀的程序员,十分优秀!