Objective-读Xml

it2026-02-23  11

有两种方式:

一:NSXMLParser

 

Utility.h:

#import <Foundation/Foundation.h>@interface Utility : NSObject {}

//获取文件在设备上的绝对路径

+ (NSString *) pathForResource:(NSString*)resourcepath;@end

 

Utility.m :

 #import "Utility.h"@implementation Utility+ (NSString*) pathForResource:(NSString*)resourcepath{    NSBundle * mainBundle = [NSBundle mainBundle];    NSMutableArray *directoryParts = [NSMutableArray arrayWithArray:[resourcepath componentsSeparatedByString:@"/"]];    NSString       *filename       = [directoryParts lastObject];    [directoryParts removeLastObject];        NSString *directoryStr = @"Xml";    NSString *path= [mainBundle pathForResource:filename                                         ofType:@""                                    inDirectory:directoryStr];        return path;}

@end

 

 - (void)viewDidLoad {

  NSURL *xmlUrl = [NSURL fileURLWithPath:[Utility pathForResource:@"SearchLog.xml"]];     NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlUrl];              [parser setDelegate:self];     [parser setShouldProcessNamespaces:NO];     [parser setShouldReportNamespacePrefixes:NO];     [parser setShouldResolveExternalEntities:NO];    

 /*启动Xml解析,会触发

   parser:        didStartElement:        namespaceURI:        qualifiedName:        attributes:*/

  [parser parse];    

  //刷新Table    // [searchTableView reloadData];              NSError *parseError = [parser parserError];     if (parseError) {                  }              [parser release];

 }

 - (void)parser:(NSXMLParser *)parser         didStartElement:(NSString *)elementName         namespaceURI:(NSString *)namespaceURI         qualifiedName:(NSString *)qName         attributes:(NSDictionary *)attributeDict{        if (qName) {        elementName = qName;    }        if (xmlSearchParsedCounter >= 5) {        [parser abortParsing];    }        if ([elementName isEqualToString:@"item"]) {        xmlSearchParsedCounter++;        NSString *value = [attributeDict valueForKey:@"value"];        [self.searchList addObject:value];    }}

 二:libxml

参考:http://blog.prosight.me/index.php/2010/02/586

展开Targets双击项目名选择所有配置搜索Header Search Path加入一行并选中recursive选项: ${SDKROOT}/usr/include/libxml2搜索Other Linker Flag加入一行:-lxml2

Utility.h:

#import <Foundation/Foundation.h>#import "TFHpple.h"@interface Utility : NSObject {}+ (NSString *) pathForResource:(NSString*)resourcepath;+ (NSMutableArray *)getXmlWithFileName:(NSString  *)fileName XPath: (NSString *)xpath;@end

 

Utility.m:

 #import "Utility.h"@implementation Utility+ (NSString*) pathForResource:(NSString*)resourcepath{    NSBundle * mainBundle = [NSBundle mainBundle];    NSMutableArray *directoryParts = [NSMutableArray arrayWithArray:[resourcepath componentsSeparatedByString:@"/"]];    NSString       *filename       = [directoryParts lastObject];    [directoryParts removeLastObject];        NSString *directoryStr = @"Xml";    NSString *path= [mainBundle pathForResource:filename                                         ofType:@""                                    inDirectory:directoryStr];        return path;}+ (NSMutableArray *)getXmlWithFileName:(NSString  *)fileName XPath: (NSString *)xpath{    NSURL *xmlUrl = [NSURL fileURLWithPath:[Utility pathForResource:fileName]];        NSData *data = [[NSData alloc] initWithContentsOfURL:xmlUrl];        TFHpple *xpathParser = [[TFHpple alloc] initWithXMLData:data];            NSArray *elements  = [xpathParser search:xpath];    NSMutableArray *array = [[NSMutableArray alloc] init];    for(TFHppleElement *element in elements) {        [array addObject:[element content]];    }        [xpathParser release];    [data release];        return array;}@end

 

 调用例子:

 searchList = [Utility getXmlWithFileName:@"SearchLog.xml" XPath:@"//SearchLog/Item/text()"];

 

转载于:https://www.cnblogs.com/fengguangqin/archive/2011/04/11/2013003.html

最新回复(0)