Ono (斧)
一种更好的处理iOS & Mac OS X上的XML & HTML的方法
Cocoa中的XML支持并不好(除非当然是XML是.plist
)。NSXMLParser
强制使用繁琐的代理模型,实现起来非常不方便。NSXMLDocument
使用起来稍微方便一些,但只能在Mac OS X上使用,并且占用大量的内存。
Ono使得处理XML & HTML像处理JSON一样简单。
无论您的应用是否需要与XML-RPC webservice接口、抓取网站或解析RSS源,Ono都将让您的日子不那么糟糕。
Ono(斧)指的是“斧”,以纪念Nokogiri(锯),意为“锯”。
特点
- 遵循标准Objective-C约定的简单、现代API,包括广泛使用blocks和
NSFastEnumeration
- 由libxml2驱动的极致文档解析和遍历性能
- 支持XPath和CSS查询
- 自动转换日期和数字值
- 正确处理XML命名空间中的元素和属性
- 能够从
NSString
或NSData
加载HTML和XML文档 - 完整文档
- 全面测试套件
安装
CocoaPods 是安装 Ono 推荐的方法。只需将以下行添加到您的 Podfile
Podfile
pod 'Ono'
使用
#import "Ono.h"
NSData *data = ...;
NSError *error;
ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:data error:&error];
for (ONOXMLElement *element in document.rootElement.children) {
NSLog(@"%@: %@", element.tag, element.attributes);
}
// Support for Namespaces
NSString *author = [[document.rootElement firstChildWithTag:@"creator" inNamespace:@"dc"] stringValue];
// Automatic Conversion for Number & Date Values
NSDate *date = [[document.rootElement firstChildWithTag:@"created_at"] dateValue]; // ISO 8601 Timestamp
NSInteger numberOfWords = [[[document.rootElement firstChildWithTag:@"word_count"] numberValue] integerValue];
BOOL isPublished = [[[document.rootElement firstChildWithTag:@"is_published"] numberValue] boolValue];
// Convenient Accessors for Attributes
NSString *unit = [document.rootElement firstChildWithTag:@"Length"][@"unit"];
NSDictionary *authorAttributes = [[document.rootElement firstChildWithTag:@"author"] attributes];
// Support for XPath & CSS Queries
[document enumerateElementsWithXPath:@"//Content" usingBlock:^(ONOXMLElement *element, NSUInteger idx, BOOL *stop) {
NSLog(@"%@", element);
}];
示例
在 Xcode 中构建和运行示例项目,以查看 Ono 的作用。
要求
Ono 兼容 iOS 5 以及更高版本,以及 Mac OS X 10.7 以及更高版本。它需要 libxml2
库,当使用 CocoaPods 安装时会自动包含,或者可以通过将 "libxml2.dylib" 添加到目标 "Link Binary With Libraries" 构建阶段手动添加。
联系我们
许可协议
Ono 以 MIT 许可协议提供。有关更多信息,请参阅 LICENSE 文件。