Objective c 在iOS中从XML中提取值?
我从Web服务中获取了一些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> &
<?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编写,但开发人员可以使用更简单的函数//使用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文件的内容创建一个新的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对象中