Ji 戟
Ji (戟) 是一个用于解析XML/HTML的libxml2的Swift封装。
特点
- 构建XML/HTML树并导航。
- 支持XPath查询。
- 综合单元测试覆盖率。
- 支持Swift包管理器(SPM)。支持Linux。
要求
- iOS 8.0+ / Mac OS X 10.9+ / watchOS 2.0+ / tvOS 9.0+
- Xcode 8.0+
安装
CocoaPods
要使用 CocoaPods 将 Ji 集成到你的 Xcode 项目中,请在 Podfile
中指定它
use_frameworks!
pod 'Ji', '~> 5.0.0'
然后,运行以下命令
$ pod install
Carthage
要使用 Carthage 将 Ji
集成到你的 Xcode 项目中,请在 Cartfile
中指定它
github "honghaoz/Ji" ~> 5.0.0
Swift Package Manager (SPM)
先决条件
- OSX
brew install libxml2
brew link --force libxml2
- Linux
$ sudo apt-get install libxml2-dev
Package.swift
更新 要将 Ji
集成到项目中,请向你的 Package.swift
文件中添加适当的描述
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
dependencies: [
.package(url: "https://github.com/honghaoz/Ji.git", from: "5.0.0")
],
targets: [
.target(
name: "YOUR_TARGET_NAME",
dependencies: ["Ji"]
),
...
]
)
手动
如果你不希望使用依赖管理器,可以手动将 Ji 集成到项目中。
-
将源代码添加到你的项目中
- 将
Ji.swift
、JiHelper.swift
和JiNode.swift
从 Sources/Ji 文件夹拖入你的项目中。 - 将 Sources/Clibxml2 文件夹拖入你的项目中。
- 将
-
配置您的项目
- 打开项目,选择目标,在 构建设置 下,在 头文件搜索路径 中,添加
$(SDKROOT)/usr/include/libxml2
- 在 构建设置 下,在 导入路径 中,添加
$(SRCROOT)/Clibxml2
(请确保这是Clibxml2
文件的路径)
- 打开项目,选择目标,在 构建设置 下,在 头文件搜索路径 中,添加
使用方法
如果您使用 CocoaPods 进行集成,请先集成 Ji。
import Ji
- 使用
URL
进行初始化
let jiDoc = Ji(htmlURL: URL(string: "http://www.apple.com/support")!)
let titleNode = jiDoc?.xPath("//head/title")?.first
print("title: \(String(describing: titleNode?.content))") // title: Optional("Official Apple Support")
- 使用
String
进行初始化
let xmlString = "<?xml version='1.0' encoding='UTF-8'?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>"
let jiDoc = Ji(xmlString: xmlString)
let bodyNode = jiDoc?.rootNode?.firstChildWithName("body")
print("body: \(String(describing: bodyNode?.content))") // body: Optional("Don\'t forget me this weekend!")
- 使用
Data
进行初始化
let googleIndexData = try? Data(contentsOf: URL(string: "http://www.google.com")!)
if let googleIndexData = googleIndexData {
let jiDoc = Ji(htmlData: googleIndexData)!
let htmlNode = jiDoc.rootNode!
print("html tagName: \(String(describing: htmlNode.tagName))") // html tagName: Optional("html")
let aNodes = jiDoc.xPath("//body//a")
if let firstANode = aNodes?.first {
print("first a node tagName: \(String(describing: firstANode.name))") // first a node tagName: Optional("a")
let href = firstANode["href"]
print("first a node href: \(String(describing: href))") // first a node href: Optional("http://www.google.ca/imghp?hl=en&tab=wi")
}
} else {
print("google.com is inaccessible")
}
let 戟文档 = 戟(htmlURL: URL(string: "https://cocoapods.org.cn/pods/Ji")!)
let attribution = 戟文档?.xPath("//ul[@class='attribution']")?.first
print("作者(Author): \(String(describing: attribution?.content))") // 作者(Author): Optional("ByHonghao Zhang")
许可证
MIT 许可证 (MIT)
版权所有 (c) 2019 张宏昊
特此授予任何获得此软件及其相关文档副本(以下称“软件”)的人免费使用本软件的权利,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或出售软件副本,并允许本软件的接收者为此目的进行操作,前提是
所有副本或软件的主要部分必须包含上述版权声明和本许可声明。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,无论是基于合同、侵权或其他法律行为,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论此类索赔、损害或其他责任是由于、来自或与本软件或其使用或其他方式产生的。