LilHTML

这是一个精简的 HTML 解析器,具有充足的优化空间。

它使用 libxml2 将 HTML 字符串解析为纯 Swift 树,而不是简单地封装 libxml2 树。

当您使用一些 HTML 调用 Parser.parse 时,您会得到一个由 MutableElementNodeMutableTextNode 组成的可变树。 这些是允许您操作树的引用类型。 如果您想要值语义,则可以在树上调用 immutableCopy() 以将其作为结构体获取。

用法

let parser = Parser(html: """
<div>
  <div class="container">
    <h1>Hi it's lil tidy</h1>
    <article>
      <p class="one two">hello</p>
      <p>world</p>
    </article>
    <footer>
      <p>it's the footer</p>
    </footer>
  </div>
</div>
""")

// Get an ElementNode
let parsed = try parser.parse().get()

// Search for tags
let paragraphs = parsed.find(.p)
XCTAssertEqual(3, paragraphs.count) // Passes!

// Search for tags inside tags
let footerParagraphs = parsed.find(.p, in: [.footer])
XCTAssertEqual(1, footerParagraphs.count) // Passes!

// Search by attribute
let firstParagraph = parsed.find(attributes: ["class": .contains("one")])
XCTAssertEqual(1, firstParagraph.count) // Passes!