Безплатна Swift библиотека за парсиране и манипулиране на HTML данни

Отворена Swift библиотека за парсиране на HTML/XML, която предоставя чист Swift API за лесно парсиране и обхождане на HTML и XML документи.

Какво е Kanna?

Ако някога сте създали Swift приложение, което трябва да извлича данни от уеб страници, да парсира API отговори в XML или да събира структурирано съдържание, вероятно сте се сблъскали с предизвикателството да работите с необработени HTML и XML низове. Стандартната библиотека на Swift не включва вграден, удобен парсер за тези формати, затова Kanna идва на помощ. В сърцевината си Kanna предоставя чист Swift API за парсиране и обхождане на HTML и XML документи. Под капака тя делегира тежката работа на libxml2, което означава, че получавате изключително стабилна производителност при парсиране, без да трябва да ре-имплементирате сложни граматически правила.

Kanna се откроява в екосистемата на Swift със своята простота и мощ. Със своя интуитивен API можете да навигирате и манипулирате HTML/XML документи, използвайки познати методи за заявка като XPath 1.0 и CSS3 селектори. Независимо дали създавате уеб скрейпер, извличате данни от RSS емисии или обработвате XML конфигурационни файлове, Kanna предоставя необходимите инструменти. Поддръжката за различни платформи е едно от най-привлекателните качества на Kanna. Тя работи на macOS, iOS, tvOS, watchOS и дори Linux. XPath 1.0 и CSS3 селектори ви предлагат два мощни, индустриално приети начина за заявка на документи. Двойната поддръжка както на CSS3 селектори, така и на XPath 1.0 я прави достатъчно гъвкава, за да се справи с всичко – от проста HTML извличане до сложна, именувана XML обработка. Независимо дали създавате iOS приложение, което консумира RSS емисия, Vapor сървър, който скрейпва цените на конкуренти, или команден ред инструмент, който трансформира XML данни, Kanna ви дава инструментите за надеждно и елегантно изпълнение на задачата.

Previous Next

Започване с Kanna

Препоръчителният и най-лесен начин за инсталиране на Kanna е чрез CocoaPods. Моля, използвайте следната команда за гладка инсталация.

Инсталирайте Kanna чрез Carthage

// add the following line to your Podfile:
use_frameworks! 
pod 'Kanna', '~> 5.2.2'

// Then run:
$ pod install

Инсталирайте Kanna чрез CocoaPods


// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2

Можете също да я инсталирате ръчно; изтеглете последните файлове от последното издание директно от GitHub хранилището.

Парсиране на HTML документи чрез Swift

Отворената библиотека Kanna включва поддръжка за зареждане и парсиране на HTML документи в Swift приложения. Най-често използваният случай за парсиране на HTML, независимо дали е изтеглен от уеб или създаден програмено. Ето прост пример, който показва как софтуерните разработчици могат да използват HTML функцията, която приема суров HTML низ, го кодират и връща обект на документ, съдържащ свойства като .title и .body, които им предоставят бърз достъп до често използвани елементи без нужда от селектор.

Как да парсираме HTML, използвайки UTF-8 кодиране, чрез Swift библиотека?

 import Kanna

// A sample HTML string representing a webpage
let htmlString = """

  
    My Tech Blog
  
  
    

Добре дошли в Swift Parsing

Kanna прави парсирането на HTML лесно и елегантно.

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") }

Поддръжка за заявки с CSS3 селектори

Библиотеката Kanna включва пълна поддръжка за CSS3 селектори, което позволява на разработчиците да използват познат синтаксис на CSS за намиране на елементи. Поддръжката на CSS селектори в Kanna ви позволява да използвате същия синтаксис на селектор, който бихте написали в стилов лист или в JavaScript функцията querySelectorAll. Това я прави много интуитивна за всеки, който идва от уеб разработка. Следният пример показва как потребителите могат да избират HTML елементи и да итерират върху множество елементи в Swift приложения.

Как да изберем множество HTML елементи и да извлечем текста от тях чрез Swift библиотека?

import Kanna

let htmlString = """


  
  • Swift книга $39.99
  • Xcode ръководство $24.99
  • iOS Основи $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)") } }

Поддръжка за заявки с XPath 1.0

Библиотеката Kanna включва поддръжка за заявки с XPath 1.0 в Swift приложения. XPath предоставя по-мощен и гъвкав начин за навигация през елементи и атрибути в XML/HTML документ. Той е особено полезен за сложни структури на документи. XPath изразите могат да обхождат документи по начини, които CSS селекторите не могат, като намиране на елементи въз основа на тяхната позиция, връзки родител‑дете или сложно съвпадение на текст. Той е незаменим за парсиране на XML и сложен HTML скрейпинг.

Парсиране и валидиране на XML чрез Swift

Освен базовото парсиране на HTML, отворената библиотека Kanna предлага мощни възможности за работа с XML. Това включва правилна валидация на XML структурата и управление на атрибутите. Когато работите със структурираните данни, ви е необходимо повече от просто извличане на елементи. Kanna предоставя пълен достъп до XML документи, включително коментари, инструкции за обработка и метаданни на документа.

Как да извършим XML парсиране в Swift приложения?

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")
    }
}


 Български