Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在iOS中从XML中提取值?_Objective C_Ios_Xml - Fatal编程技术网

Objective c 在iOS中从XML中提取值?

Objective c 在iOS中从XML中提取值?,objective-c,ios,xml,Objective C,Ios,Xml,我从Web服务中获取了一些XML: <?xml version="1.0" encoding="utf-8"?> <NewDataSet> <Table> <CITY>Jupiter</CITY> <STATE>FL</STATE> <ZIP>33477</ZIP> <AREA_CODE>561</AREA_CODE> &

我从Web服务中获取了一些XML:

<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
  <Table>
    <CITY>Jupiter</CITY>
    <STATE>FL</STATE>
    <ZIP>33477</ZIP>
    <AREA_CODE>561</AREA_CODE>
    <TIME_ZONE>E</TIME_ZONE>
  </Table>
</NewDataSet>

木星
佛罗里达州
33477
561
E

我需要一种简单、干净的方法来获取这个XML中的城市和州值。在iOS中有没有一种简单的方法可以做到这一点?

完成这一点的工具太多了()。我建议使用
SAX
方法,因为您只需解析
XML
数据(例如)。

完成此操作的工具太少了()。我建议使用
SAX
方法,因为您只需解析此
XML
数据(例如)。

请查看:
NSXMLParser

和方法:
(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI(NSString*)namespaceURI qualifiedName:(NSString*)qName属性:(NSDictionary*)attributeDict

它使用起来非常简单。
`

请查看:
NSXMLParser

和方法:
(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI(NSString*)namespaceURI qualifiedName:(NSString*)qName属性:(NSDictionary*)attributeDict

它使用起来非常简单。
`

有一个整洁的NSXMLParser包装器,可以将XML文件转换为NSDictionary

它简单而干净

然后,您可以使用:

NSDictionary *dict = [self convertXML:xmlContents];
NSArray *tables = [dict objectForKey:@"NewDataSet"];

for (NSDictionary *table in tables) {

   NSLog(@"City = %@", [table objectForKey:@"city"]);

}

有一个整洁的NSXMLParser包装器,可以将XML文件转换为NSXmlDictionary

它简单而干净

然后,您可以使用:

NSDictionary *dict = [self convertXML:xmlContents];
NSArray *tables = [dict objectForKey:@"NewDataSet"];

for (NSDictionary *table in tables) {

   NSLog(@"City = %@", [table objectForKey:@"city"]);

}

您可以使用NSXMLParser,我现在不在mac上,所以请仔细检查,但基本上您可以使用返回的数据设置NSXMLParser。然后将一个类设置为解析器的委托,当解析器命中一个元素时,它将告诉您它命中了哪个元素及其属性


如果您对Web服务有任何控制,我将认真考虑使用JSON数据而不是XML。ObjC附带了一个非常好的JSON解析器。

您可以使用NSXMLParser,我现在不在mac上,所以请仔细检查,但基本上您可以使用返回的数据设置一个NSXMLParser。然后将一个类设置为解析器的委托,当解析器命中一个元素时,它将告诉您它命中了哪个元素及其属性

如果您对Web服务有任何控制,我将认真考虑使用JSON数据而不是XML。ObjC附带了一个非常好的JSON解析器。

使用NSXMLParser编写,但开发人员可以使用更简单的函数

  • 将SMXMLDocument.h和.m文件添加到项目中
  • 在类实现文件(.m文件)中添加#import

    //使用xml文件的内容创建一个新的SMXMLDocument
    //数据是XML的NSData表示形式
    SMXMLDocument*document=[SMXMLDocumentDocumentWithData:数据错误:&error];
    //拉出节点
    SMXMLElement*dataset=[document.root ChildName:@“NewDataSet”];
    //看透孩子
    对于([dataset ChildrenName:@“table”]中的SMXMLElement*表){
    //演示提取XML数据的常见情况
    NSString*city=[表值WithPath:@“city”];//子节点值
    NSString*state=[表值WithPath:@“state”];//子节点值
    }
    
  • 另外,我没有运行这段代码,但根据类似的用法对其进行了修改,以匹配您的案例。

    使用使用NSXMLParser编写的,但具有开发人员可以使用的更简单的功能

  • 将SMXMLDocument.h和.m文件添加到项目中
  • 在类实现文件(.m文件)中添加#import

    //使用xml文件的内容创建一个新的SMXMLDocument
    //数据是XML的NSData表示形式
    SMXMLDocument*document=[SMXMLDocumentDocumentWithData:数据错误:&error];
    //拉出节点
    SMXMLElement*dataset=[document.root ChildName:@“NewDataSet”];
    //看透孩子
    对于([dataset ChildrenName:@“table”]中的SMXMLElement*表){
    //演示提取XML数据的常见情况
    NSString*city=[表值WithPath:@“city”];//子节点值
    NSString*state=[表值WithPath:@“state”];//子节点值
    }
    

  • 另外,我没有运行这段代码,但是根据类似的用法对其进行了修改以匹配您的案例。

    有一些用于解析XML文件的开源框架。但是,像这样的简单结构可以使用NSDictionary dictionaryWithContentOfFile读取。在这种情况下,您将收到一本词典。它有一个目标。对象是存储在“NewDataSet”键下的字典。包含键为“Table”的词汇表。这也是一个字典,它用关键字CITY、STATE、ZIP、AREA\u CODE和TIME\u ZONE存储您的值。严格来说,读取的文件必须是一个属性列表。属性列表也恰好是XML。有关它的更多信息,请参阅。它应该适合您的情况,是一个非常简单的实现。对于更复杂的XML,这可能不起作用。它可能不适用于非常大的XML文件,因为文件的内容完全存储在一个字典对象中。但是,像这样的简单结构可以使用NSDictionary dictionaryWithContentOfFile读取。在这种情况下,您将收到一本词典。它有一个目标。对象是存储在“NewDataSet”键下的字典。包含键为“Table”的词汇表。这也是一个字典,它用关键字CITY、STATE、ZIP、AREA\u CODE和TIME\u ZONE存储您的值。严格来说,读取的文件必须是一个属性列表。属性列表也恰好是XML。有关它的更多信息,请参阅。它应该适合您的情况,是一个非常简单的实现。对于更复杂的XML,这可能不起作用。它可能不适用于非常大的XML文件,因为文件的内容完全存储在一个Dictionary对象中