XML解析的目标C代码
问题描述:
我只是想分析从一个帖子回应收到的字符串,我知道有像NSXMLParse的lib /类和苹果提供了一些例子,但不是我想要的,或者我还没有准备好了解该代码。XML解析的目标C代码
我收到此:
<object>
<id>1</id>
<alias>juan</alias>
<email>[email protected]</email>
</object>
<object>
<id>2</id>
<alias>juana</alias>
<email>[email protected]</email>
</object>
然后我需要解析,并获得这样的数据:
NSString *xmlThing = [response];
for xmlThing in-all <object>
{
uint id = <id>1</id>
NSString *alias = <alias>juan</alias>
NSString *email = <email>[email protected]</email>
}
为什么这样呢?因为我认为是最简单的方法来解析各种html,xml等文件。
我很感激各种帮助。
答
您可以使用NSXMLParser及其委托方法。
例: 在* .h文件中添加NSXMLDelegate:
@interface YourClass: NSObject <NSXMLParserDelegate>
* .m文件:
@interface YourClass()
@property NSMutableString *currentXMLValue;
@property NSMutableArray *objects;
@end
@implementation YourClass{
-(void) processXML {
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData: data];
self.objects = [[NSMutableArray alloc] init];
[xmlParser setDelegate: self];
[xmlParser parse];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//each time part of string is found append it to current string
[self.currentXMLValue appendString:string];
}
//here you can check when <object> appears in xml and create this object
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
attributes: (NSDictionary *)attributeDict
{
//each time new element is found reset string
self.currentXMLValue = [[NSMutableString alloc] init];
if([elementName isEqualToString:@"object"])
{
self.obj= [[YourObject alloc] init];
}
}
//this is triggered when there is closing tag </object>, </alias> and so on. Use it to set object's properties. If you get </object> - add object to array.
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"id"]) {
obj.id = [self.currentXMLValue intValue];
}
else if ([elementName isEqualToString:@"alias"]) {
obj.alias = self.currentXMLValue;
}
else if ([elementName isEqualToString:@"object"]) {
if (self.objects) {
[self.object addObject:obj];
}
}
//and so on
}
}
答
您可以使用XMLReader类来毫不费力地解析XML文件。 对于更详细的结账https://appengineer.in/2013/08/03/xml-parsing-using-xml-reader-in-objective-c/
'NSXMLParser'看起来像它将是您的示例的正确选择。你有什么困难呢? – 2013-02-22 14:56:41
其实我不明白类的引用'https:// developer.apple.com/library/mac /#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html'我应该使用哪种方法知道在xml文件中有多少个?我需要知道循环所有这些,然后我如何告诉从 标签返回值? –
rokimoki
2013-02-22 15:05:49
'NSXMLParser'使用一种称为委派的模式。请参阅[此SO帖子](http://*.com/a/1045854/620197)关于代表团。它被广泛用于所有的iOS/Foundation/UIKit API。下面的答案很直接,应该直接回答你的问题。 – 2013-02-22 15:14:31