登录
首页 >  Golang >  Go问答

解析包含多种类型内容的 XML 标签(比如 CDATA、其他标签)

来源:stackoverflow

时间:2024-03-19 13:54:27 325浏览 收藏

解析包含多种类型内容的 XML 标签(如 CDATA、其他标签)是一项常见任务。本文将探讨使用 XML 解析器(例如 xmlquery)提取此类 XML 中不同类型数据的方法。通过查询和遍历 XML 文档,我们可以将内容分离到指定的数据结构中,例如带有 CData、图像 URL 和纯文本字段的结构。本文将提供一个清晰的解决方案,说明如何处理具有混合内容的 XML 标签,以便轻松访问和处理数据。

问题内容

尝试解组 xml 文件,例如:


    
    some_url_here
    
    mixed content here

element 标签内有不同类型的数据,我如何将此 xml 解压缩为如下结构:

type XMLElement struct {
    XMLName xml.Name `xml:"Element"`
    CDatas []string `....`
    Image string `...`
    PlainText string `...`
}

或任何其他可以在其中解组此 xml 的结构。


解决方案


这个解决方案不太好,因为xmlquerycdata元素制作为text节点类型,但我认为它很简单,它使用xpath查询。

package main

import (
    "fmt"
    "strings"

    "github.com/antchfx/xmlquery"
)

func main() {
    s := `

some_url_here


`
    doc, err := xmlquery.Parse(strings.NewReader(s))
    if err != nil {
        panic(err)
    }
    elem := xmlquery.FindOne(doc, "//Element")
    for n := elem.FirstChild; n != nil; n = n.NextSibling {
        if n.Data == "image" {
            fmt.Printf("image: %s\n", n.InnerText())
        } else if n.Type == xmlquery.TextNode {
            if len(strings.TrimSpace(n.InnerText())) == 0 {
                // skip it because its' empty node
            } else {
                fmt.Printf("cdata: %s\n", n.InnerText())
            }
        }
    }
    // or using query expression
    image := xmlquery.FindOne(doc, "//image")
    fmt.Printf("image: %s\n", image.InnerText())
}

理论要掌握,实操不能落!以上关于《解析包含多种类型内容的 XML 标签(比如 CDATA、其他标签)》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>