Iphone XMLParser建议
我不确定我做错了什么。我有一个指向XML树的URL,看起来像:Iphone XMLParser建议,iphone,ios,xml,parsing,nsxmlparser,Iphone,Ios,Xml,Parsing,Nsxmlparser,我不确定我做错了什么。我有一个指向XML树的URL,看起来像: <result> ... <title> ... </title> <body> ... </body> ... </result> 这是我的XMLParser.h: #import <Foundation/Foundation.h> #import "Object.h" @interface XMLParser
<result>
...
<title>
...
</title>
<body>
...
</body>
...
</result>
这是我的XMLParser.h:
#import <Foundation/Foundation.h>
#import "Object.h"
@interface XMLParser : NSObject <NSXMLParserDelegate>
{
NSMutableString *currentNodeContent;
NSMutableArray *arrayOfObjects;
NSXMLParser *parser;
Object *currentObject;
}
@property (readonly, retain) NSMutableArray *arrayOfObjects;
-(id) loadXMLbyURL:(NSString *)urlString;
@end
在我的主代码中,我对XML解析器进行了如下调用:
xmlParser = [[XMLParser alloc] loadXMLbyURL:@"www.websiteWithXML.com"];
但是,我的arrayOfObjects中没有放置任何内容(我知道这一点,因为当我告诉tableview拥有与我的数组一样多的行时,没有行)
请帮忙!!!提前谢谢你 不确定这是否有帮助 尝试更改:
arrayOfObjects = [[NSMutableArray alloc] init];
致:
除此之外,您的代码似乎还不错。表没有加载任何内容并不意味着数组中没有对象。在完成解析之后和尝试加载tableview之前,使用断点查看数据 尝试在每个元素开始时重置currentNodeContent。例如:
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"result"])
{
currentObject = [Object alloc];
}
else if ([elementName isEqualToString:@"title"] || [elementName isEqualToString:@"body"])
{
[currentNodeContent setString:@""];
}
}
然后,当您收到字符时,执行追加操作:
-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[currentNodeContent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
}
通过这样做,您可以处理foundCharacters多次捕获给定元素中的所有字符的情况。为什么要为数组指定readonly属性。。。?尝试非原子我遵循这个教程,它工作得很好,但当我试图调整它为我的使用。。。它不起作用!你能发布一个你试图从中提取数据的实际URL吗?
arrayOfObjects = [[NSMutableArray alloc] init];
arrayOfObjects = [[NSMutableArray alloc] initWithCapacity:0];
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"result"])
{
currentObject = [Object alloc];
}
else if ([elementName isEqualToString:@"title"] || [elementName isEqualToString:@"body"])
{
[currentNodeContent setString:@""];
}
}
-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[currentNodeContent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
}