如何比较Golang中的HTML标记?

时间:2016-05-28 11:48:39

标签: html go canonicalization

我正在尝试提供一个测试套件,用于检查HTML片段/文件在规范上是否彼此等效。我很惊讶地看到,如果我解析相同的字符串或文件,https://godoc.org/golang.org/x/net/html#Node的比较会有所不同。我错过了什么?

希望这证明了这个问题:

package main

import (
    "fmt"
    "strings"

    "golang.org/x/net/html"
)

func main() {
    s := `<h1>
    test
    </h1><p>foo</p>`
    // s2 := `<h1>test</h1><p>foo</p>`

    doc, _ := html.Parse(strings.NewReader(s))
    doc2, _ := html.Parse(strings.NewReader(s))

    if doc == doc2 {
        fmt.Println("HTML is the same") // Expected this
    } else {
        fmt.Println("HTML is not the same") // Got this
    }
}

HTML不一样

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用反射,因为html.Parse返回*Node个对象。比较Go中的两个对象需要reflect.DeepEqual

if reflect.DeepEqual(doc, doc2) {                                     
        fmt.Println("HTML is the same") 
} else {
        fmt.Println("HTML is not the same")                         
}

这打印出来&#34; HTML是相同的&#34;。