[英]Parsing XML data to NSMutableArray iOS - iPhone
This is the XML data: 这是XML数据:
<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>
Here I want to get the <categoryName>
values into my NSMutableArray categList
. 在这里,我想将
<categoryName>
值放入我的NSMutableArray categList
。
The code I have used is: 我使用的代码是:
- (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);
}
But I am not getting the category names in my NSMutableArray categList
: 但我没有在我的
NSMutableArray categList
获取类别名称:
Whats wrong in my code? 我的代码有什么问题? :(
:(
Thanks 谢谢
Hey You can use XMLReader but it will return NSDictionary
. 嘿你可以使用XMLReader,但它会返回
NSDictionary
。
The Following code demo for XMLReader to get NSDictionary
. 以下为
XMLReader to get NSDictionary
代码演示。
import XMLReader
in your file. 在文件中导入
XMLReader
。
#import "XMLReader.h"
Then use following method to get NSDictionary
. 然后使用以下方法获取
NSDictionary
。 Where you have to pass your XML
as NSString
. 您必须将
XML
作为NSString
传递的位置。
NSDictionary* xmlDict = [XMLReader dictionaryForXMLString:theXML error:&er];
If you want to use GDataXMLParser you can use following code that is working fine 如果您想使用GDataXMLParser,您可以使用以下正常工作的代码
First Impost GDataXMLParser library file then write vbe 首先Impost 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];
}
here i have parsing of you r Application its working very fine pls check it make a category object orientation class and use it. 在这里,我已经解析了你的应用程序,它的工作非常精细请检查它是否为类别对象定向类并使用它。
-(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];
}
and call the loaddatafrm xml function as [self loaddatafromxml]; 并将loaddatafrm xml函数调用为[self loaddatafromxml]; its working nice try it .
它的工作很好试试吧。
Thanks 谢谢
You use if ( [elementName isEqualToString:@"categList"])...
but I can't find categList
name in you XML sample. 你使用
if ( [elementName isEqualToString:@"categList"])...
但我在你的XML样本中找不到categList
名称。 Check please - this can be an issue. 请检查 - 这可能是一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.