Nokogiri如何将HTML表单字符串解析为DOM

时间:2012-12-11 18:02:10

标签: html ruby html-parsing nokogiri

我一直在研究Nokogiri源代码,但还没有得到Nokogiri如何将字符串解析为Elements。源代码可以在这里找到:

https://github.com/sparklemotion/nokogiri/tree/master/lib/nokogiri

例如:我有一个字符串:

raw = "<html> <body> body <div>this is div </div> </body> <html>"

Nokogiri::HTML(raw)
=> 
#(Document:0x4d0c786 {
  name = "document",
  children = [
    #(DTD:0x4d0bc6e { name = "html" }),
    #(Element:0x4cfa46e {
      name = "html",
      children = [
        #(Element:0x4cf9bfe {
          name = "body",
          children = [
            #(Text "body"),
            #(Element:0x4cf9348 {
              name = "div",
              children = [ #(Text "this is div")]
              })]
          })]
      })]
  })

我查看了nokogiri / lib / nokogiri / xml / sax,我没有看到它如何解释html字符串。当我尝试阅读源代码时,我意识到在上面的输出中有数据类型Element,但我没有看到源代码中的任何地方声明class Element

一般来说,任何人都可以帮我解释一下Nokogiri如何将字符串解析为上面的数据结构?

1 个答案:

答案 0 :(得分:2)

如上所述,Nokogiri使用libxml2来处理实际的解析。这是使用本机(读取:C编码)Ruby扩展来完成的。 Ruby有一个well documented标准接口,用于构建本机扩展。 Here is a good guide