Ono 2.1.2

Ono 2.1.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2019年4月

Mattt维护。



Ono 2.1.2

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命名空间中的元素和属性
  • 能够从NSStringNSData加载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" 构建阶段手动添加。

联系我们

Mattt

许可协议

Ono 以 MIT 许可协议提供。有关更多信息,请参阅 LICENSE 文件。