如何使用Go修改HTML文件的元素?

时间:2017-02-19 06:00:25

标签: html xml go

我一直试图解决这个问题几天,即使是最有效的谷歌搜索,我也已经筋疲力尽了。我一直在尝试打开一个HTML类型的文件,并使用Go的库(http://golang.org/x/net/html)将img标签及其源修改为已知目录和文件集。到目前为止,我已经能够找到使用它的元素,

//Open the file and return a variable called file.
file, _ = os.Open(file.Name())
//Create the doc
doc, err := html.Parse(file)
//Check for err when generating the doc
check(err)
//Look for tags with img using an anonymous function.
var f func(*html.Node)
f = func(n *html.Node) {
    if n.Type == html.ElementNode && n.Data == "img" {
        for _, img := range n.Attr {
            if img.Key == "src" {
                str := breakdownURL(img.Val) //Gets the ../../resource/(thing.h23.jpg) <-- That
                //Creating a static address to add to the dynamic one
                address := filepath.Join(filepath.Join("Resources", getFileNotExt(file)), str)
                img.Val = address
                break
            }
        }
    }

    for at := n.FirstChild; at != nil; at = at.NextSibling {
        f(at)
    }
}

f(doc)

已经能够找到元素并附加正确的目录,但它只修改了这个doc文件。我不知道如何将它附加到实际文件中。我唯一的想法是将文档打开为某种写入方式并将新数据从doc复制到文件中。任何帮助是极大的赞赏!非常感谢你抽出时间:)。

1 个答案:

答案 0 :(得分:1)

您绝对应该保存已编辑的文档。

首先,打开文件进行读/写并截断:

file, err := os.OpenFile("sample.html", os.O_RDWR | os.O_TRUNC, 0644)

完成处理后,覆盖原始文件:

html.Render(file, doc)