PF1*_*PF1 19 xml cocoa parsing objective-c
今天我正在研究如何在Cocoa中创建一个简单的XML解析器(用于桌面).我正在考虑使用NSXMLParser来解析数据,但我不确定从哪里开始.Web上的XML文件中没有太多数据,只是一个简单的列表,其中包含一些我需要保存到变量中的内容.有没有人对如何做到这一点有任何建议,因为有关这方面的在线文档没有太多意义.
谢谢你的帮助!
编辑我想要创建XML解析器的原因是从服务器上的MYSQL数据库获取信息到客户端应用程序.如果除了XML解析器之外还有更好的方法,请告诉我!
Dav*_*ong 50
以下是它的工作原理:
有一个名为NSXMLParser的类.它用于解析XML文件.但是,NSXMLParser是愚蠢的.所有它知道如何解析XML,但它不知道它应该对它找到的信息做什么.
输入代表.代表就像一个保姆.由于XMLParser不知道如何处理它找到的信息,它会向其代表询问每一件事:"嘿!我开始解析文档了!我应该做什么吗?" "嘿!我发现了一些CDATA!我该怎么办呢!" "嘿!我发现了另一个标签!" "嘿!我发现了一个结束标签!",依此类推.所有这些"嘿!" 语句是委托方法,换句话说,它们是委托对象可以选择实现的可选方法.通常(但并非总是),创建NSXMLParser的对象也是委托,但不一定是这种情况.
所以你可能有这样的事情:
NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:someURLToAnXMLFile];
[parser setDelegate:self];
[parser parse];
[parser release];
Run Code Online (Sandbox Code Playgroud)
然后在同一个对象(self)中,你可能有以下一些方法:
- (void)parserDidStartDocument:(NSXMLParser *)parser {
//the parser started this document. what are you going to do?
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
//the parser found an XML tag and is giving you some information about it
//what are you going to do?
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
//the parser found some characters inbetween an opening and closing tag
//what are you going to do?
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
//the parser finished. what are you going to do?
}
Run Code Online (Sandbox Code Playgroud)
文档中列出了大量这些方法.只需转到NSXMLParser类引用,它们都列在"委托方法"部分下.一旦掌握了它,NSXMLParser就非常容易使用.它是一个SAX Parser,这意味着它是事件驱动的解析器.它找到了东西,并告诉你它.