如何在xcode中解析xml文件(parse xml files in xcode)

尽管内置XML解析器为新的桌面或移动应用程序增加了真正的价值,但编写该功能通常需要大量的开发时间和beta测试。苹果的Xcode程序包括一个XML解析器,它绕过了大部分手工工作。...

尽管内置XML解析器为新的桌面或移动应用程序增加了真正的价值,但编写该功能通常需要大量的开发时间和beta测试。苹果的Xcode程序包括一个XML解析器,它绕过了大部分手工工作。

XML文件可以包含任何内容,从应用程序的基本数据到网站的RSS提要。它们也可以是远程更新应用程序中信息的一种很好的方式,因此不需要向苹果提交新的二进制文件,只需在列表中添加一个新项目。

xcode进程

内置的Xcode进程包含初始化要使用的变量、启动XML解析器进程、向该进程提供文件、评估单个元素和这些元素中的字符(值)、识别单个元素的结尾以及终止解析进程的步骤。

使用xml解析器

为了说明细节,我们将通过传递一个特定的web地址(URL)来解析来自internet的示例文件。

从构建头文件开始。这是详细视图控制器的一个非常基本的头文件示例,具有解析文件的最低要求:

@interface RootViewController : UITableViewController {DetailViewController *detailViewController;NSXMLParser *rssParser;NSMutableArray *articles;NSMutableDictionary *item;NSString *currentElement;NSMutableString *ElementValue;BOOL errorParsing;}@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController;- (void)parseXMLFileAtURL:(NSString *)URL;

parseXMLFileAtURL函数启动该过程。完成后,NSMutableArray“articles”保存数据。该数组由可变字典组成,其中的键与XML文件中的字段名相关。

接下来,初始化流程:

- (void)parserDidStartDocument:(NSXMLParser *)parser{NSLog(@"File found and parsing started");}

此函数在流程开始时运行。不需要在这个函数中放入任何内容,但是如果您希望在开始解析文件时执行任务,则可以在这里放入代码。

指示程序下载一些东西

接下来,指示程序下载以下内容:

- (void)parseXMLFileAtURL:(NSString *)URL{NSString *agentString = @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1";NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:URL]];[request setValue:agentString forHTTPHeaderField:@"User-Agent"];xmlFile = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ];articles = [[NSMutableArray alloc] init];errorParsing=NO;rssParser = [[NSXMLParser alloc] initWithData:xmlFile];[rssParser setDelegate:self];// You may need to turn some of these on depending on the type of XML file you are parsing[rssParser setShouldProcessNamespaces:NO];[rssParser setShouldReportNamespacePrefixes:NO];[rssParser setShouldResolveExternalEntities:NO];[rssParser parse];}

此函数指示引擎下载特定web地址(URL)处的文件,并启动解析过程。我们告诉远程服务器,我们是在Mac上运行的Safari,以防服务器试图将iPhone/iPad重定向到移动版本。

最后的选项特定于某些XML文件。大多数RSS文件和通用XML文件不需要打开它们。

错误检查结果

对结果执行一些基本的错误检查:

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {NSString *errorString = [NSString stringWithFormat:@"Error code %i", [parseError code]];NSLog(@"Error parsing XML: %@", errorString);errorParsing=YES;}This error-checking routing sets a binary value if it encounters an error. You may need something more specific here depending on what you are doing. If you simply need to run some code after processing in the case of error, the

此错误检查例程在遇到错误时设置二进制值。你可能需要一些更具体的东西,这取决于你在做什么。如果在发生错误的情况下只需要在处理后运行一些代码,那么此时可以调用错误解析二进制变量。

分析检索到的内容

接下来,程序对检索到的内容进行分解并进行分析:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{currentElement = [elementName copy];ElementValue = [[NSMutableString alloc] init];if ([elementName isEqualToString:@"item"]) {item = [[NSMutableDictionary alloc] init];}}

XML解析器的肉包含三个函数,一个在单个元素的开头运行,一个在元素解析的中间运行,另一个在元素的结尾运行。

对于本例,我们将解析一个类似于RSS文件的文件,该文件将元素分解为XML文件中项目标题下的组。在处理开始时,我们检查元素名“item”,并在检测到新组时分配item字典。否则,我们将初始化变量的值:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{[ElementValue appendString:string];}

当我们找到字符时,只需将它们添加到变量ElementValue中:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{if ([elementName isEqualToString:@"item"]) {[articles addObject:[item copy]];} else {[item setObject:ElementValue forKey:elementName];}}

解析完成后会发生什么

当程序完成对元素的处理时,它必须执行以下两项操作之一:

  • 如果end元素是item,那么我们已经完成了分组,所以我们将把字典添加到文章数组中。
  • 如果元素不是item,我们将在字典中使用与元素名称匹配的键设置值(这意味着XML文件中的每个字段不需要单独的变量。我们可以更动态地处理它们。)

这是解析例程所需的最后一个函数;文件到此结束。将任何最终代码放在此处或指定一个纠错子程序:

- (void)parserDidEndDocument:(NSXMLParser *)parser {if (errorParsing == NO){NSLog(@"XML processing done!");} else {NSLog(@"Error occurred during XML processing");}}

保存数据

许多应用程序可能希望在这里做的一件事是将数据或XML文件保存到设备上的文件中。这样,如果下次加载应用程序时设备没有连接到互联网,它仍然可以获取此信息。

当然,我们不能忘记最重要的部分:告诉你的应用程序解析文件(并给它一个网址来找到它!)。要启动该过程,请将这行代码添加到要执行XML处理的适当位置:

[self parseXMLFileAtURL:@"http://www.webaddress.com/file.xml"];

  • 发表于 2021-09-08 07:21
  • 阅读 ( 57 )
  • 分类:数学

你可能感兴趣的文章

如何用代码读写xml文件

您想学习如何从java读写XML文件吗? ...

  • 发布于 2021-03-12 02:25
  • 阅读 ( 417 )

关于linux中bash for loops的所有知识

... 第一行告诉运行这个程序的人如何运行它(即使用bash解释器)。第二个命令与您在命令行中输入的任何其他命令一样。将该文件另存为hello_世界.sh,然后: ...

  • 发布于 2021-03-29 06:22
  • 阅读 ( 320 )

为什么zip压缩单个文件比压缩具有相同内容的多个文件更好?

能够压缩我们的文件以便更容易地共享和/或传输它们可以使我们的电子生活更容易,但有时我们在压缩文件后可能会看到奇怪或意外的大小调整结果。为什么?今天的超级用户问答帖子回答了一位困惑读者的问题。 今天的问答...

  • 发布于 2021-04-10 01:56
  • 阅读 ( 238 )

如何在mac上禁用spotlight中的开发者搜索结果

...章,特别是当你的Mac上有很多源代码文件的时候。下面是如何禁用它-即使您没有安装Xcode。 如果您安装了xcode 相关:如何像冠军一样使用macOS的聚光灯 如果您安装了Xcode,这很简单,因为您可以用正常的方式来完成。 单击Apple...

  • 发布于 2021-04-10 04:38
  • 阅读 ( 223 )

如何在不越狱的情况下将应用程序侧载到iphone或ipad上

苹果刚刚对iOS开放了一点。现在可以在iPhone或iPad上侧载开源应用程序,例如模拟器,而无需每年支付99美元获得开发者许可证。 但是门刚刚开了一条缝。iOS仍然没有提供windows10和Android的完全侧载支持。但是你现在可以安装开源...

  • 发布于 2021-04-10 05:16
  • 阅读 ( 227 )

如何在Windows8中同时搜索多个文件类型?

...动的问答网站分组。 问题 超级用户读者Sebastien想知道如何在Windows 8中同时搜索多种文件类型: I am looking for files in a particular directory that have the following extensi***: .txt, .csv, and .xml. The directory has many levels of sub-directories that I would lik...

  • 发布于 2021-04-11 08:15
  • 阅读 ( 146 )

mac用户对新的“xcsset”恶意软件应该知道什么

...络安全公司Trend Micro发布了一份报告,详细说明了攻击者如何利用XCSSET接管用户的浏览器,窃取用户的个人数据、账户密码和保存的支付信息。但这不仅是攻击的潜在严重性,使这种恶意软件如此严重;这也是它潜入用户设备的...

  • 发布于 2021-05-12 14:41
  • 阅读 ( 199 )

如果你不是开发者,如何安装最新的苹果betas

...会因早期的操作系统测试版而崩溃,那么你可能不会在意如何获取这些文件(我希望你不打算在你的主要智能**上安装iOS13,但我也不会阻止你。)macos catalina/ios 13/ipados 13我们将从macOS Catalina开始,因为您目前需要先安装它,然后...

  • 发布于 2021-05-13 23:05
  • 阅读 ( 182 )

如何在iphone上安装未经批准的应用程序而不越狱

...不会有这个问题,但如果你有,这个Reddit帖子详细介绍了如何解决它。第五步:在ios设备上批准自己最后,第一次这样做时,您需要批准自己作为iOS设备的开发人员(您只需要第一次这样做)。前往“设置”>“常规”>“配...

  • 发布于 2021-05-18 00:50
  • 阅读 ( 127 )

json文件(json)和xml格式(xml)的区别

...的通用标记语言。JSON代表JavaScript对象表示法,用于以可解析的方式在internet上传输数据。它是一种高度面向数据的格式。它有一个开放的标准文件格式和一个数据交换格式。JSON使用人类可读的文本来存储和传输数据。它独立于...

  • 发布于 2021-07-11 09:17
  • 阅读 ( 214 )
hvrh9121485
hvrh9121485

0 篇文章

相关推荐