Archived
229 lines
5.8 KiB
Markdown
229 lines
5.8 KiB
Markdown
Kanna(鉋)
|
|
=================
|
|
|
|
Kanna(鉋) is an XML/HTML parser for cross-platform(macOS, iOS, tvOS, watchOS and Linux!).
|
|
|
|
It was inspired by [Nokogiri](https://github.com/sparklemotion/nokogiri)(鋸).
|
|
|
|
[](https://travis-ci.org/tid-kijyun/Kanna)
|
|
[](https://developer.apple.com/resources/)
|
|
[](http://cocoadocs.org/docsets/Kanna/)
|
|
[](https://github.com/Carthage/Carthage)
|
|
[](https://github.com/apple/swift-package-manager)
|
|
[](https://www.versioneye.com/objective-c/kanna/references)
|
|
|
|
:information_source: [Documentation](http://tid-kijyun.github.io/Kanna/)
|
|
|
|
|
|
Features:
|
|
=================
|
|
- [x] XPath 1.0 support for document searching
|
|
- [x] CSS3 selector support for document searching
|
|
- [x] Support for namespaces
|
|
- [x] Comprehensive test suite
|
|
|
|
Installation:
|
|
=================
|
|
|
|
### Swift 5
|
|
##### CocoaPods
|
|
Adding it to your `Podfile`:
|
|
```ruby
|
|
use_frameworks!
|
|
pod 'Kanna', '~> 5.0.0'
|
|
```
|
|
|
|
##### Carthage
|
|
Adding it to your `Cartfile`:
|
|
|
|
```ogdl
|
|
github "tid-kijyun/Kanna" ~> 5.0.0
|
|
```
|
|
|
|
1. In the project settings add `$(SDKROOT)/usr/include/libxml2` to the "header search paths" field
|
|
|
|
##### Others(Swift PM and manual Installation)
|
|
Please refer to the case of Swift 4.
|
|
|
|
### Swift 4
|
|
##### CocoaPods
|
|
**:warning: CocoaPods (`1.1.0 or later`) is required.**
|
|
|
|
Adding it to your `Podfile`:
|
|
```ruby
|
|
use_frameworks!
|
|
pod 'Kanna', '~> 4.0.0'
|
|
```
|
|
|
|
##### Carthage
|
|
Adding it to your `Cartfile`:
|
|
|
|
```ogdl
|
|
github "tid-kijyun/Kanna" ~> 4.0.0
|
|
```
|
|
|
|
1. In the project settings add `$(SDKROOT)/usr/include/libxml2` to the "header search paths" field
|
|
|
|
##### Swift Package Manager
|
|
|
|
Installing libxml2 to your computer:
|
|
|
|
```bash
|
|
// macOS
|
|
$ brew install libxml2
|
|
$ brew link --force libxml2
|
|
|
|
// Linux(Ubuntu)
|
|
$ sudo apt-get install libxml2-dev
|
|
```
|
|
|
|
Adding it to your `Package.swift`:
|
|
|
|
```swift
|
|
// swift-tools-version:4.0
|
|
import PackageDescription
|
|
|
|
let package = Package(
|
|
name: "YourProject",
|
|
dependencies: [
|
|
.package(url: "https://github.com/tid-kijyun/Kanna.git", from: "4.0.0")
|
|
],
|
|
targets: [
|
|
.target(
|
|
name: "YourTarget",
|
|
dependencies: ["Kanna"]),
|
|
]
|
|
)
|
|
```
|
|
|
|
```bash
|
|
$ swift build
|
|
```
|
|
|
|
*Note: When a build error occurs, please try run the following command:*
|
|
```bash
|
|
$ sudo apt-get install pkg-config
|
|
```
|
|
|
|
##### Manual Installation
|
|
1. Add these files to your project:
|
|
[Kanna.swift](Source/Kanna.swift)
|
|
[CSS.swift](Source/CSS.swift)
|
|
[libxmlHTMLDocument.swift](Source/libxml/libxmlHTMLDocument.swift)
|
|
[libxmlHTMLNode.swift](Source/libxml/libxmlHTMLNode.swift)
|
|
[libxmlParserOption.swift](Source/libxml/libxmlParserOption.swift)
|
|
[Modules](Modules)
|
|
1. In the target settings add `$(SDKROOT)/usr/include/libxml2` to the `Search Paths > Header Search Paths` field
|
|
1. In the target settings add `$(SRCROOT)/Modules` to the `Swift Compiler - Search Paths > Import Paths` field
|
|
|
|
|
|
### Swift 3.0
|
|
For now, please use the `feature/v3.0.0` branch.
|
|
|
|
##### CocoaPods
|
|
**:warning: CocoaPods (`1.1.0 or later`) is required.**
|
|
|
|
Adding it to your `Podfile`:
|
|
```ruby
|
|
use_frameworks!
|
|
pod 'Kanna', :git => 'https://github.com/tid-kijyun/Kanna', :branch => 'feature/v3.0.0'
|
|
```
|
|
|
|
##### Carthage
|
|
Adding it to your `Cartfile`:
|
|
|
|
```ogdl
|
|
github "tid-kijyun/Kanna" "feature/v3.0.0"
|
|
```
|
|
|
|
1. In the project settings add `$(SDKROOT)/usr/include/libxml2` to the "header search paths" field
|
|
|
|
##### Swift Package Manager
|
|
|
|
Installing libxml2 to your computer:
|
|
|
|
```bash
|
|
// macOS
|
|
$ brew install libxml2
|
|
$ brew link --force libxml2
|
|
|
|
// Linux(Ubuntu)
|
|
$ sudo apt-get install libxml2-dev
|
|
```
|
|
|
|
Adding it to your `Package.swift`:
|
|
|
|
```swift
|
|
import PackageDescription
|
|
|
|
let package = Package(
|
|
name: "YourProject",
|
|
|
|
dependencies: [
|
|
.Package(url: "https://github.com/tid-kijyun/Kanna.git", majorVersion: 2)
|
|
]
|
|
)
|
|
```
|
|
|
|
```bash
|
|
$ swift build
|
|
```
|
|
|
|
*Note: When a build error occurs, please try run the following command:*
|
|
```bash
|
|
$ sudo apt-get install pkg-config
|
|
```
|
|
|
|
##### Manual Installation
|
|
1. Add these files to your project:
|
|
[Kanna.swift](Source/Kanna.swift)
|
|
[CSS.swift](Source/CSS.swift)
|
|
[libxmlHTMLDocument.swift](Source/libxml/libxmlHTMLDocument.swift)
|
|
[libxmlHTMLNode.swift](Source/libxml/libxmlHTMLNode.swift)
|
|
[libxmlParserOption.swift](Source/libxml/libxmlParserOption.swift)
|
|
[Modules](Modules)
|
|
1. In the target settings add `$(SDKROOT)/usr/include/libxml2` to the `Search Paths > Header Search Paths` field
|
|
1. In the target settings add `$(SRCROOT)/Modules` to the `Swift Compiler - Search Paths > Import Paths` field
|
|
|
|
Synopsis:
|
|
=================
|
|
|
|
```swift
|
|
import Kanna
|
|
|
|
let html = "<html>...</html>"
|
|
|
|
if let doc = try? HTML(html: html, encoding: .utf8) {
|
|
print(doc.title)
|
|
|
|
// Search for nodes by CSS
|
|
for link in doc.css("a, link") {
|
|
print(link.text)
|
|
print(link["href"])
|
|
}
|
|
|
|
// Search for nodes by XPath
|
|
for link in doc.xpath("//a | //link") {
|
|
print(link.text)
|
|
print(link["href"])
|
|
}
|
|
}
|
|
```
|
|
|
|
```swift
|
|
let xml = "..."
|
|
if let doc = try? Kanna.XML(xml: xml, encoding: .utf8) {
|
|
let namespaces = [
|
|
"o": "urn:schemas-microsoft-com:office:office",
|
|
"ss": "urn:schemas-microsoft-com:office:spreadsheet"
|
|
]
|
|
if let author = doc.at_xpath("//o:Author", namespaces: namespaces) {
|
|
print(author.text)
|
|
}
|
|
}
|
|
```
|
|
|
|
License:
|
|
=================
|
|
The MIT License. See the LICENSE file for more information.
|