求教使用 Golang 替换 html 的标签里的内容

2022-10-19 16:37:41 +08:00
 antxiaoye

直接上想要达到的效果吧;

替换前内容:

<h1>h1.1</h1><h1>h1.2</h1><div>div1<span>span1</span></div>

希望替换后内容:

<h1>Replace_h1.1</h1><h1>Replace_h1.2</h1><div>Replace_div1<span>Replace_span1</span></div>

目前楼主使用了PuerkitoBio/goquery可以实现基本功能,但是缺点是会自行补充html标签,例如:

// 使用 goquery 替换的效果 fmt.Println(doc.Html())
<html><head></head><body><h1>Replace_h1.1</h1><h1>Replace_h1.2</h1><div>Replace_div1<span>Replace_span1</span></div></body></html>

<html><head></head><body>这些标签是楼主并不想要的?

求大佬们解惑。

有什么办法可以避免这种标签补全呢?或者有其他方案或者其他包可以实现。

1680 次点击
所在节点    Go 编程语言
13 条回复
dreasky
2022-10-19 17:01:26 +08:00
正则表达式不简单吗
dog82
2022-10-19 17:01:52 +08:00
感觉正则可以实现,跟 go 没关系
duan602728596
2022-10-19 17:11:10 +08:00
我的建议是使用 goquery 替换后,再使用正则把<html><head></head><body>和</body></html>这段去掉
antxiaoye
2022-10-19 18:32:28 +08:00
如果没有一个包可以用的话,我会选择用正则的,但是还是想以最快的方法实现这个功能。
securityCoding
2022-10-19 20:08:54 +08:00
楼上的 goquery
luvroot
2022-10-19 20:16:31 +08:00
"github.com/antchfx/htmlquery"

获取到的 doc 对象进行操作,不像要的可以把 node 找到后删除。

h1 找到后 是个 list 。然后循环的进行替换

for index,nodeH1 :=range. xxx {
if nodeH1!=nil {
origin :=htmlquery.htmlquery.InnerText
//根据某种要求进行替换。然后回写
}
}
ysc3839
2022-10-20 06:48:34 +08:00
不能先取到 body 再 get html 吗?
antxiaoye
2022-10-20 16:31:47 +08:00
@ysc3839 需要替换的字符串没有 body 哦。
ysc3839
2022-10-20 16:32:45 +08:00
@antxiaoye 从结果来看是那个库自己加上了 body 吧?
Joker123456789
2022-10-20 17:32:20 +08:00
这不就是个 xml 吗?
antxiaoye
2022-10-21 10:07:25 +08:00
我直接用正则吧,貌似没有合适的库。
antxiaoye
2022-10-21 10:08:44 +08:00
@ysc3839 是的,这个库自己补全这些标签,所以不太符合我希望达到的效果,我还是用正则吧~
youngster
2022-10-21 16:37:02 +08:00
go template 试试?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/888155

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX