全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在 Go 中解析 XML 时保留 HTML 标签内容

在 go 中使用 `encoding/xml` 解析含嵌套 html 标签的 xml 字段时,默认会忽略标签、仅提取纯文本;需使用 `xml:",innerxml"` 标签显式捕获原始 xml/html 片段。

Go 的标准库 encoding/xml 在解析结构体字段时,默认行为是跳过子元素标签,只提取其字符数据(text content)。因此,当 XML 中 内部包含 This has styleThen some not-style 时,普通 xml:"text" 字段只会得到 "This has styleThen some not-style" —— 不仅丢失 HTML 标签,连格式空格也可能被归一化。

要完整保留原始 HTML 片段(包括标签、属性、嵌套结构和空白),必须使用特殊的 struct tag:xml:",innerxml"。它告诉解码器将该字段对应 XML 元素的全部内部 XML 字节流(不含起始/结束标签本身) 直接赋值为字符串。

以下是修正后的完整示例:

package main

import (
    "encoding/xml"
    "fmt"
)

type ResultSlice struct {
    MyText []Result `xml:"results>result"`
}

type Result struct {
    Text struct {
        HTML string `xml:",innerxml"` // ✅ 关键:捕获  内所有原始内容
    } `xml:"text"`
}

func main() {
    s := `
                         
              This has styleThen some not-style
              No style here
              Again, no style
            
          `

    r := &ResultSlice{}
    if err := xml.Unmarshal([]byte(s), r); err != nil {
        fmt.Fatalf("XML unmarshal error: %v", err)
    }

    for i, res := range r.MyText {
        fmt.Printf("Result %d: %q\n", i+1, res.Text.HTML)
    }
}

输出结果为:

Result 1: "This has styleThen some not-style"
Result 2: "No style here"
Result 3: "Again, no style"

⚠️ 注意事项:

  • xml:",innerxml" 必须作用于匿名或具名嵌套结构体字段(如本例中的 Text struct{...}),不能直接放在顶层 string 字段上(否则解析会失败或行为未定义);
  • 它返回的是原始字节序列的字符串表示,不进行 HTML 转义/解码——若源 XML 中有 zuojiankuohaophpcn 等实体,它们将原样保留,需额外调用 html.UnescapeString 处理;
  • 若需进一步解析 HTML 内容(如提取 文本),应结合 golang.org/x/net/html 包,而非依赖 encoding/xml;
  • 该方案适用于 HTML 片段混入 XML 的场景(如富文本 RSS 描述、CMS 导出数据),但不适用于严格 XHTML(需确保嵌套结构良好,否则 Unmarshal 可能报错)。

总结:xml:",innerxml" 是 Go 解析混合 HTML/XML 数据的必备技巧——它放弃语义解析,转而提供字节级控制权,是兼顾简洁性与准确性的标准实践。


# html  # go  # cms  # golang  # 字节  # ai  # 标准库  # xhtml  # String  # xml  # 字符串  # 结构体  # Struct  # this  # 适用于  # 的是  # 放在  # 中有  # 只会  # 不含  # 报错  # 而非  # 但不  # 将该 


相关文章: 高端智能建站公司优选:品牌定制与SEO优化一站式服务  制作公司内部网站有哪些,内网如何建网站?  ,巨量百应是干嘛的?  如何通过虚拟机搭建网站?详细步骤解析  如何用PHP快速搭建高效网站?分步指南  Android自定义控件实现温度旋转按钮效果  如何在万网主机上快速搭建网站?  为什么Go需要go mod文件_Go go mod文件作用说明  建站主机如何选?高性价比方案全解析  建站org新手必看:2024最新搭建流程与模板选择技巧  b2c电商网站制作流程,b2c水平综合的电商平台?  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何快速生成专业多端适配建站电话?  建站之星3.0如何解决常见操作问题?  网站制作模板下载什么软件,ppt模板免费下载网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  韩国服务器如何优化跨境访问实现高效连接?  如何解决VPS建站LNMP环境配置常见问题?  建站之家VIP精选网站模板与SEO优化教程整合指南  婚礼视频制作网站,学习*后期制作的网站有哪些?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何在Golang中指定模块版本_使用go.mod控制版本号  如何在阿里云完成域名注册与建站?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何快速搭建支持数据库操作的智能建站平台?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  网站制作难吗安全吗,做一个网站需要多久时间?  中山网站制作网页,中山新生登记系统登记流程?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  建站主机功能解析:服务器选择与快速搭建指南  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Thinkphp 中 distinct 的用法解析  如何选择高效稳定的ISP建站解决方案?  广州营销型建站服务商推荐:技术优势与SEO优化解析  教程网站设计制作软件,怎么创建自己的一个网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  如何在VPS电脑上快速搭建网站?  如何在IIS中新建站点并配置端口与物理路径?  如何用狗爹虚拟主机快速搭建网站?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何通过网站建站时间优化SEO与用户体验?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  浅析上传头像示例及其注意事项 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。