Gratis Swift-bibliotek til at parse og manipulere HTML-data
Open source HTML/XML-parsings Swift-bibliotek, der leverer et rent Swift API til nem parsing og gennemløb af HTML- og XML-dokumenter.
Hvad er Kanna?
Hvis du nogensinde har bygget en Swift-applikation, der skal udtrække data fra websider, parse API-svar i XML eller skrabe struktureret indhold, har du sandsynligvis stødt på udfordringen med at arbejde med rå HTML- og XML-strenge. Swifts standardbibliotek indeholder ikke en indfødt, ergonomisk parser til disse formater, og det er her, Kanna træder til for at redde dagen. I sin kerne leverer Kanna et rent Swift-API til parsing og gennemløb af HTML- og XML-dokumenter. Under motorhjelmen delegere den det tunge løft til libxml2, hvilket betyder, at du får en robust parsing‑ydelse uden at skulle genimplementere komplekse grammatikregler selv.
Kanna skiller sig ud i Swift-økosystemet på grund af sin enkelhed og kraft. Med sit intuitive API kan du navigere i og manipulere HTML/XML-dokumenter ved hjælp af velkendte forespørgselsmetoder som XPath 1.0 og CSS3-selectors. Uanset om du bygger en webscraper, udtrækker data fra RSS-feeds eller behandler XML-konfigurationsfiler, leverer Kanna de værktøjer, du har brug for. Cross-platform support er en af Kanna's mest attraktive egenskaber. Den kører på macOS, iOS, tvOS, watchOS og endda Linux. XPath 1.0 og CSS3-selectors giver dig to kraftfulde, branchestandard måder at forespørge dokumenter på. Dens dobbelte support for både CSS3-selectors og XPath 1.0 gør den fleksibel nok til at håndtere alt fra simpel HTML-udtrækning til kompleks, navnerumsbaseret XML-behandling. Uanset om du bygger en iOS-app, der forbruger et RSS-feed, en Vapor-server, der scraper konkurrenters priser, eller et kommandolinjeværktøj, der transformerer XML-data, giver Kanna dig værktøjerne til at få arbejdet gjort pålideligt og elegant.
Kom i gang med Kanna
Den anbefalede og letteste måde at installere Kanna på er ved at bruge CocoaPods. Brug venligst følgende kommando for en problemfri installation.
Installer Kanna via Carthage
// add the following line to your Podfile:
use_frameworks!
pod 'Kanna', '~> 5.2.2'
// Then run:
$ pod install
Installer Kanna via CocoaPods
// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2
Du kan også installere den manuelt; download de seneste udgivelsesfiler direkte fra GitHub-lageret.
Parsing af HTML-dokumenter via Swift
Det open source Kanna-bibliotek har inkluderet support for indlæsning og parsing af HTML-dokumenter i Swift-applikationer. Det mest almindelige brugstilfælde for denne parsing af HTML, uanset om den er downloadet fra nettet eller konstrueret programmatisk. Her er et simpelt eksempel, der viser, hvordan softwareudviklere kan bruge HTML-funktionen, som accepterer en rå HTML-streng, kodere den og returnerer et dokumentobjekt indeholdende egenskaber som .title og .body, der giver dem hurtig adgang til almindelige elementer uden at skulle bruge en selector.
Hvordan parser man HTML ved hjælp af UTF-8-kodning via Swift-biblioteket?
import Kanna
// A sample HTML string representing a webpage
let htmlString = """
My Tech Blog
Velkommen til Swift Parsing
Kanna gør HTML-parsing nemt og elegant.
View on GitHub
"""
// Parse the HTML string using UTF-8 encoding
if let doc = try? HTML(html: htmlString, encoding: .utf8) {
// Access the document title directly via a convenience property
print(doc.title ?? "No title found")
// Output: My Tech Blog
// Access the full body text
print(doc.body?.text ?? "No body")
}
Support til CSS3-selectorforespørgsler
Kanna-biblioteket har inkluderet fuld support for CSS3-selectorer, så udviklere kan bruge den velkendte CSS-syntax til at finde elementer. Kanna's CSS-selector-support giver dig mulighed for at bruge den samme selector-syntax, som du måske ville skrive i et stylesheet eller i JavaScripts querySelectorAll. Dette gør det meget intuitivt for alle, der kommer fra en webudviklingsbaggrund. Det følgende eksempel viser, hvordan brugere kan vælge HTML-elementer og iterere over flere elementer i Swift-applikationer.
Hvordan vælger man flere HTML-elementer & udtrækker tekst fra dem via Swift-biblioteket?
import Kanna
let htmlString = """
-
Swift Bog
$39.99
-
Xcode Guide
$24.99
-
iOS Grundprincipper
$49.99
"""
if let doc = try? HTML(html: htmlString, encoding: .utf8) {
// Select all elements with class "product" inside a "ul"
for product in doc.css("ul.product-list li.product") {
// Extract text from nested span elements using child selectors
let name = product.css("span.name").first?.text ?? "Unknown"
let price = product.css("span.price").first?.text ?? "N/A"
// Access HTML attributes using subscript notation
let productId = product["data-id"] ?? "No ID"
print("[\(productId)] \(name) — \(price)")
}
}
Support til XPath 1.0-forespørgsler
Kanna-biblioteket har inkluderet support for XPath 1.0-forespørgsler i Swift-apps. XPath giver en mere kraftfuld og fleksibel måde at navigere gennem elementer og attributter i et XML/HTML-dokument. Det er især nyttigt for komplekse dokumentstrukturer. XPath-udtryk kan gennemløbe dokumenter på måder, som CSS-selectorer ikke kan, såsom at finde elementer baseret på deres position, forælder-barn-relationer eller kompleks tekstmatchning. Det er uundværligt til XML-parsing og kompleks HTML-scraping.
XML-parsing og validering via Swift
Udover grundlæggende HTML-parsing tilbyder det open source Kanna-bibliotek robuste XML-håndteringsfunktioner. Dette inkluderer korrekt validering af XML-struktur og håndtering af attributter. Når du arbejder med strukturerede data, har du brug for mere end blot udtræk af elementer. Kanna giver fuld adgang til XML-dokumenter, inklusive kommentarer, behandlingsinstruktioner og dokumentmetadata.
Hvordan udfører man XML-parsing i Swift-apps?
import Kanna
let xmlString = """
Swift Developer News
-
Kanna 6.0 Released with Swift 6 Support
Alex Johnson
Mon, 26 Jun 2024 00:00:00 GMT
-
New Features in Swift 5.10
Maria Garcia
Tue, 15 Apr 2024 00:00:00 GMT
"""
if let doc = try? Kanna.XML(xml: xmlString, encoding: .utf8) {
// Define a namespace mapping: prefix -> URI
// The prefix you use here ("dc") can be anything; it maps to the namespace URI
let namespaces = [
"dc": "http://purl.org/dc/elements/1.1/"
]
// Query elements in the "dc" namespace using the prefix
for item in doc.xpath("//item", namespaces: namespaces) {
let title = item.at_xpath("title")?.text ?? "No title"
let creator = item.at_xpath("dc:creator", namespaces: namespaces)?.text ?? "Unknown"
let pubDate = item.at_xpath("pubDate")?.text ?? "No date"
print("Title: \(title)")
print("Author: \(creator)")
print("Published: \(pubDate)\n")
}
}