Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios xcode中的XML数据解析和存储_Ios_Objective C_Xml Parsing_Nsstring - Fatal编程技术网

Ios xcode中的XML数据解析和存储

Ios xcode中的XML数据解析和存储,ios,objective-c,xml-parsing,nsstring,Ios,Objective C,Xml Parsing,Nsstring,我有一个XML文件,其中有5个项目(每个项目都有标题和url),我希望使用XML解析在xcode中检索所有项目,然后将所有项目存储在数组中,以便在应用程序中使用它们。让我给你看我所有的代码 XML文件 <data> <item> <title>Eggs</title> <link> http://URL/ios/category.php?cat_id=14 </link> </item> <item>

我有一个XML文件,其中有5个项目(每个项目都有标题和url),我希望使用XML解析在xcode中检索所有项目,然后将所有项目存储在数组中,以便在应用程序中使用它们。让我给你看我所有的代码

XML文件

<data>
<item>
<title>Eggs</title>
<link>
http://URL/ios/category.php?cat_id=14
</link>
</item>
<item>
<title>Bakery</title>
<link>
http://URL/ios/category.php?cat_id=15
</link>
</item>
<item>
<title>Bread</title>
<link>
http://URL/ios/category.php?cat_id=16
</link>
</item>
<item>
<title>Cakes, Pies Patisserie</title>
<link>
http://URL/ios/category.php?cat_id=17
</link>
</item>
<item>
<title>Specialty Breads</title>
<link>
http://URL/ios/category.php?cat_id=119
</link>
</item>
</data>
下面是所有解析方法

#pragma mark NSXMLParser delegate
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"item"]){
        xmlStringFileObject =[[XMLStringFile alloc]init];
    } else {
        nodecontent = [[NSMutableString alloc] init];
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [nodecontent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
    NSLog(@"node content = %@",nodecontent);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"item"]){
        [rssOutputData addObject:xmlStringFileObject];
        xmlStringFileObject = nil;
    } else if([elementName isEqualToString:@"title"]){
        xmlStringFileObject.xmltitle= nodecontent;
        nodecontent = nil;
    }
    else if([elementName isEqualToString:@"link"]){
        xmlStringFileObject.xmllink= nodecontent;
        nodecontent = nil;
    }
}
这里是XMLStringFile.h和XMLStringFile.m

XMLStringFile.h

#import <Foundation/Foundation.h>

@interface XMLStringFile : NSObject {
    NSString *xmllink,*xmltitle;
}
@property(nonatomic,retain)NSString *xmllink,*xmltitle;
@end
现在,我想将这两个条目存储在两个单独的数组标题和链接中,然后我想将来从这些数组中检索它们。我需要帮助,请告诉我怎么做。目前,xmltitle和xmllink存储检索到的数据,但如果我在另一个函数中使用它,它只是nslog last-complete。

下载

ViewDidLoad
方法中

- (void)viewDidLoad {

    NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://cms.proxiclients.com/choithrams/mycategories.xml"]];

    NSString *XMLString = [[NSString alloc]initWithData:xmlData encoding:NSUTF8StringEncoding];

    XMLString = [XMLString stringByReplacingOccurrencesOfString:@"\n" withString:@""];

    NSDictionary *dict = [XMLReader dictionaryForXMLString:XMLString error:nil];

    NSLog(@"== %@",dict);

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
您可以按如下方式获取字典值

NSString *linkText = [[[[dict valueForKey:@"data"] valueForKey:@"item"] valueForKey:@"link"] valueForKey:@"text"];
linkText = [linkText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
您的输出是:


为什么重复:?你能给我你的URL吗。我帮你。是的,你的真实身份是你有字典数据,然后你可以使用它。我是对的。我现在更新了所有的代码,请查看。我下载了XMLReader好的,我在我的项目中添加了这两个文件,现在查看我的代码并告诉我应该做什么注意:使用此方法从代码中删除NSXmlParserDelegate方法NSString*linkText=[[[dict valueForKey:@“data”]valueForKey:@“item”]valueForKey:@“link”]valueForKey:@“text”];我得到数据。。。。。。我的输出nesscaryParsedata==(“8.0”、“2.0”、“315.0”、“145.0”),我需要在标签中查看我该怎么做请帮助我???
#import "XMLStringFile.h"
@implementation XMLStringFile
@synthesize xmllink,xmltitle;
-(void)dealloc
{
}
- (void)viewDidLoad {

    NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://cms.proxiclients.com/choithrams/mycategories.xml"]];

    NSString *XMLString = [[NSString alloc]initWithData:xmlData encoding:NSUTF8StringEncoding];

    XMLString = [XMLString stringByReplacingOccurrencesOfString:@"\n" withString:@""];

    NSDictionary *dict = [XMLReader dictionaryForXMLString:XMLString error:nil];

    NSLog(@"== %@",dict);

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
NSString *linkText = [[[[dict valueForKey:@"data"] valueForKey:@"item"] valueForKey:@"link"] valueForKey:@"text"];
linkText = [linkText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];