解析XML数据的NSMutableArray的iOS - iPhone
这是XML数据:解析XML数据的NSMutableArray的iOS - iPhone
<Categorys>
<Category>
<categoryId>25</categoryId>
<categoryName>My Photos</categoryName>
<categoryDescription>Description</categoryDescription>
<categoryIconPath>7.jpg</categoryIconPath>
<userId>2</userId>
<categoryStatus>ON</categoryStatus>
<publicPrivate>Private</publicPrivate>
</Category>
......more categories
<Categorys>
在这里,我想获得<categoryName>
值代入我的NSMutableArray categList
。
我用的代码是:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary*)attributeDict {
if ([elementName isEqualToString:@"categList"]) {
// addresses is an NSMutableArray instance variable
if (!categList)
categList = [[NSMutableArray alloc] init];
return;
}
NSLog(@"StartedElement %@", elementName);
element = [NSMutableString string];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(element == nil)
element = [[NSMutableString alloc] init];
[element appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
NSLog(@"Found an element named: %@ with a value of: %@", elementName, element);
if ([elementName isEqualToString:@"categoryName"]) {
NSLog(@"\n\n\nfound::::::::::::::: %@", element);
category = element;
NSLog(@"category:::: %@", category);
}
[categList addObject:element];
NSLog(@"categList*************** %@", categList);
}
但我没有得到的类别名称在我NSMutableArray categList
:
哪些错误在我的代码? :(
感谢
嘿,你可以使用XMLReader,但它会返回NSDictionary
。
下面的代码演示了XMLReader to get NSDictionary
。
进口XMLReader
在您的文件。
#import "XMLReader.h"
然后用下面的方法得到NSDictionary
。你必须通过你的XML
as NSString
。
NSDictionary* xmlDict = [XMLReader dictionaryForXMLString:theXML error:&er];
如果你想使用GDataXMLParser你可以用以下这是工作的罚款代码
一是关税GDataXMLParser库文件,然后写VBE
-(void)XMLParsing
{
GdataParser *parser = [[GdataParser alloc] init];
NSString* urlString = @"YOURURL";
NSURL *url = [[NSURL alloc] initWithString:urlString];
[parser downloadAndParse:url withRootTag:@"Category" withTags:[NSDictionary dictionaryWithObjectsAndKeys:@"categoryId",@"categoryId",@"categoryName",@"categoryName",@"categoryDescription",@"categoryDescription",@"categoryIconPath",@"categoryIconPath",@"userId",@"userId",@"categoryStatus",@"categoryStatus",@"publicPrivate",@"publicPrivate",nil]
sel:@selector(finishGetDataSF:)
andHandler:self];
[urlSR release];
[parser release];
}
-(void)getDate:(NSDictionary*)dict
{
NSLog(@"Data from XML file == %@",dict);
NSArray* arrayTemp = [dict copy];
}
我想用所需的数据填充数组,以便我在tableview中使用它 – 2012-03-27 08:12:37
我认为你可以做NSArray * arrayTemp = [dict copy];这样 – iDhaval 2012-03-27 08:29:07
您使用if ([elementName isEqualToString:@"categList"])...
,但我无法找到categList
名称在你的XML样本。请检查 - 这可能是一个问题。
这里我解析你r应用程序的工作非常好,请检查它使类别对象方向类,并使用它。
-(void)loaddatafromxml
{
NSString *ur=[NSString stringWithFormat:@"Enter your url"];
NSURL *url=[NSURL URLWithString:ur];
NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:url];
conn=[[NSURLConnection alloc]initWithRequest:req delegate:self];
if(conn)
webdata=[[NSMutableData data]retain];
}
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webdata appendData:data];
}
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[webdata setLength:0];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
categaryArry=[[NSMutableArray alloc]init];
NSString *thexml=[[NSString alloc] initWithBytes:[webdata mutableBytes] length:[webdata length] encoding:NSASCIIStringEncoding];
NSArray *arr=[thexml componentsSeparatedByString:@"<Category>"];
for(int i=1;i<[arr count];i++)
{
categList *object = [[categList alloc] init];
NSString *str=[arr objectAtIndex:i];
NSArray *arr=[str componentsSeparatedByString:@"<categoryId>"];
NSString *data=[arr objectAtIndex:1];
NSRange ranfrom=[data rangeOfString:@"</categoryId>"];
object.catid=[data substringToIndex:ranfrom.location];
arr=[str componentsSeparatedByString:@"<categoryName>"];
data=[arr objectAtIndex:1];
ranfrom=[data rangeOfString:@"</categoryName>"];
object.catname=[data substringToIndex:ranfrom.location];
arr=[str componentsSeparatedByString:@"<categoryDescription>"];
data=[arr objectAtIndex:1];
ranfrom=[data rangeOfString:@"</categoryDescription>"];
object.catdesc=[data substringToIndex:ranfrom.location];
arr=[str componentsSeparatedByString:@"<categoryIconPath>"];
data=[arr objectAtIndex:1];
ranfrom=[data rangeOfString:@"</categoryIconPath>"];
object.caticon=[data substringToIndex:ranfrom.location];
arr=[str componentsSeparatedByString:@"<userId>"];
data=[arr objectAtIndex:1];
ranfrom=[data rangeOfString:@"</userId>"];
object.userid=[data substringToIndex:ranfrom.location];
arr=[str componentsSeparatedByString:@"<categoryStatus>"];
data=[arr objectAtIndex:1];
ranfrom=[data rangeOfString:@"</categoryStatus>"];
object.catstatus=[data substringToIndex:ranfrom.location];
arr=[str componentsSeparatedByString:@"<publicPrivate>"];
data=[arr objectAtIndex:1];
ranfrom=[data rangeOfString:@"</publicPrivate>"];
object.publicpriv=[data substringToIndex:ranfrom.location];
[categaryArry addObject:object];
}
[self.table_data reloadData];
[thexml release];
[connection release];
}
并将loaddatafrm xml函数调用为[self loaddatafromxml];它的工作很好尝试。
谢谢
只是使用JSON,开销小,代码少,分析速度快。 – 2012-03-27 06:59:56