2012-07-25 85 views
0

我得到了一些对XML的支持,形成一个Web服务:从iOS中提取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> 

我需要一个简单干净的方式来获得城市和州值构成此XML。有没有一个很好的和简单的方法来做到这一点在iOS?

+0

有解析XML文件的开源框架。但是,像这样的简单结构可以使用NSDictionary dictionaryWithContentOfFile读取。在这种情况下,你会收到一本字典。它有一个对象。该对象是一个存储在“NewDataSet”键中的字典。这包含了与“表”的关键字的一个词。那是一个词典,它也存储你的值与关键城市,州,邮政编码,AREA_CODE和TIME_ZONE。 – 2012-07-25 11:11:13

+0

严格来说,读取的文件必须是属性列表。属性列表恰巧也是XML。有关它的更多信息,请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html。它应该适合你的情况,是一个非常简单的实现。对于更复杂的XML,这可能无法正常工作。它也可能不适用于非常大的XML文件,因为该文件的内容完全存储在一个Dictionary对象中。 – 2012-07-25 11:14:03

回答

2

Theres一个整洁的NSXMLParser Wrapper,它将XML文件转换为NSDictionary。

它很简单,干净!

http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/

然后从那里,你可以使用:

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

for (NSDictionary *table in tables) { 

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

} 
+0

我看了这个,我的项目是使用ARC – Slee 2012-07-25 11:15:27

+0

为那些项目文件禁用arc.http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file- IN-A-项目 – 2012-07-25 11:27:07

0

有丢失的工具来完成这项工作(link)。我建议使用SAX方法,因为您只需解析此XML数据(例如NSXMLParser)。

0

请看:NSXMLParser

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

它的使用非常简单。 `

0

可以使用的NSXMLParser,我在我的Mac是不是现在这样的大炮仔细检查,但基本上你设置一个的NSXMLParser与返回的数据。然后,您将一个类设置为解析器的委托,当解析器碰到一个元素时,它会告诉您它已经命中的元素,它是属性。

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

1

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

  1. 添加SMXMLDocument.h和.m文件到您的项目
  2. 添加#进口在类实现文件(.m文件)

    // create a new SMXMLDocument with the contents the xml file 
    // data is the NSData representation of your XML 
    SMXMLDocument *document = [SMXMLDocument documentWithData:data error:&error]; 
    
    // Pull out the <NewDataSet> node 
    SMXMLElement *dataset = [document.root childNamed:@"NewDataSet"]; 
    
    // Look through <Table> children 
    for (SMXMLElement *table in [dataset childrenNamed:@"Table"]) { 
        // demonstrate common cases of extracting XML data 
        NSString *city = [table valueWithPath:@"CITY"]; // child node value 
        NSString *state = [table valueWithPath:@"STATE"]; // child node value 
    } 
    

附:我没有运行这个代码,但修改了基于类似用法的情况。