You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang修改HTML文本且不影响HTML标签

用Go处理HTML文本(不修改标签)的方案

要实现只修改HTML中的文本内容(比如转大写)、不影响标签和属性,核心是精准区分HTML的标签节点和文本节点。直接对整个HTML字符串做替换或大小写转换会破坏标签结构,所以得用HTML解析器来遍历节点,只处理文本部分。

实现代码

下面是完整的Go代码示例,功能是把HTML里的所有文本内容转为大写,标签和属性保持原样:

package main

import (
	"bytes"
	"fmt"
	"golang.org/x/net/html"
	"strings"
)

// modifyText 自定义文本处理函数,这里实现转大写
func modifyText(text string) string {
	return strings.ToUpper(text)
}

// processHTML 遍历HTML节点,处理所有文本节点
func processHTML(node *html.Node) {
	if node.Type == html.TextNode {
		node.Data = modifyText(node.Data)
	}
	// 递归处理子节点
	for child := node.FirstChild; child != nil; child = child.NextSibling {
		processHTML(child)
	}
}

func main() {
	// 原始HTML内容
	rawHTML := `<h2>Relative URLs</h2>
<p><a href="html_images.asp">HTML Images</a></p>
<p><a href="/css/default.asp">CSS Tutorial</a></p>`

	// 解析HTML
	doc, err := html.Parse(strings.NewReader(rawHTML))
	if err != nil {
		fmt.Println("解析HTML出错:", err)
		return
	}

	// 处理文本节点
	processHTML(doc)

	// 渲染修改后的HTML
	var buf bytes.Buffer
	if err := html.Render(&buf, doc); err != nil {
		fmt.Println("渲染HTML出错:", err)
		return
	}

	// 输出结果
	fmt.Println(buf.String())
}

代码说明

  • 依赖golang.org/x/net/html包:这是Go官方维护的HTML解析工具,能精准解析HTML的节点结构
  • modifyText函数:可以根据需求替换成其他文本处理逻辑(比如替换特定字符串、转小写等),这里实现的是转大写
  • processHTML函数:递归遍历所有HTML节点,只对文本节点调用处理函数,标签节点和属性完全不碰
  • 最后通过html.Render把修改后的节点树重新转为HTML字符串

处理效果

原始HTML:

<h2>Relative URLs</h2>
<p><a href="html_images.asp">HTML Images</a></p>
<p><a href="/css/default.asp">CSS Tutorial</a></p>

处理后结果:

<h2>RELATIVE URLS</h2>
<p><a href="html_images.asp">HTML IMAGES</a></p>
<p><a href="/css/default.asp">CSS TUTORIAL</a></p>

内容的提问来源于stack exchange,提问作者Seomat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:15:44