全网整合营销服务商

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

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

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

go 的 `encoding/xml` 包默认会将 xml 元素的子节点(如 html 标签)解析为纯文本并忽略嵌套结构,若需原样保留 html 片段(如 `` 标签),应使用 `xml:",innerxml"` 标签而非普通字段映射。

在 Go 中解析包含内嵌 HTML 的 XML 时,常见的误区是直接将 HTML 内容映射为 string 类型字段(如 MyResult stringxml:"text`),这会导致xml.Unmarshal自动展开并丢弃所有子元素标签,仅提取纯文本内容(即“扁平化”处理)。例如HelloWorld会被解析为"HelloWorld",而` 标签本身完全丢失。

正确做法是利用 encoding/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 内容
    } `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.Printf("Parse error: %v\n", err)
        return
    }

    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" 不能直接用于顶层字段(如 HTML stringxml:"text,innerxml"`),必须包裹在结构体内,否则解析行为未定义或失败;
  • 返回的字符串是未经转义的原始内容(如 & 仍为 &,不会自动解码),如需 HTML 渲染,建议配合 html.UnescapeString 或模板安全输出;
  • 若需进一步解析嵌套 HTML(如提取 文本),应使用专用 HTML 解析器(如 golang.org/x/net/html),而非继续依赖 encoding/xml;
  • 此方法适用于 HTML 片段混入 XML 的场景(如 RSS 描述、富文本 API 响应),但不适用于严格 XHTML(需确保嵌套结构合法,否则解析可能出错)。

总结:",innerxml" 是 Go XML 解析器中保留原始子节点序列的唯一可靠方式,合理封装结构体字段即可精准捕获含标签的 HTML 内容,避免信息丢失。


# html  # go  # golang  # 字节  # ai  # xhtml  # String  # 封装  # xml  # 字符串  # 结构体  # 适用于  # 而非  # 若需  # 能将  # 如需  # 但不  # 会将  # 这会  # 将该  # 关键在于 


相关文章: 如何快速打造个性化非模板自助建站?  如何在云主机上快速搭建多站点网站?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何选择高效可靠的多用户建站源码资源?  建站之星如何开启自定义404页面避免用户流失?  Python如何创建带属性的XML节点  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  小型网站建站如何选择虚拟主机?  Swift中switch语句区间和元组模式匹配  高防服务器租用如何选择配置与防御等级?  如何通过多用户协作模板快速搭建高效企业网站?  如何在服务器上三步完成建站并提升流量?  青岛网站建设如何选择本地服务器?  建站之星如何保障用户数据免受黑客入侵?  大连网站制作公司哪家好一点,大连买房网站哪个好?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何确保西部建站助手FTP传输的安全性?  如何通过虚拟主机快速搭建个人网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  建站之星云端配置指南:模板选择与SEO优化一键生成  c# await 一个已经完成的Task会发生什么  已有域名建站全流程解析:网站搭建步骤与建站工具选择  定制建站如何定义?其核心优势是什么?  网站制作的步骤包括,正确网址格式怎么写?  移民网站制作流程,怎么看加拿大移民官网?  视频网站制作教程,怎么样制作优酷网的小视频?  建站之星后台管理如何实现高效配置?  怀化网站制作公司,怀化新生儿上户网上办理流程?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  七夕网站制作视频,七夕大促活动怎么报名?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  中山网站制作网页,中山新生登记系统登记流程?  如何在阿里云香港服务器快速搭建网站?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  建站之星安装后界面空白如何解决?  php json中文编码为null的解决办法  如何在IIS中配置站点IP、端口及主机头?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  西安专业网站制作公司有哪些,陕西省建行官方网站?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  建站之星收费标准详解:套餐费用及年费价格表一览  学校为何禁止电信移动建设网站?  网站专业制作公司有哪些,做一个公司网站要多少钱?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何通过二级域名建站提升品牌影响力?  如何正确选择百度移动适配建站域名?  制作宣传网站的软件,小红书可以宣传网站吗? 

您的项目需求

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