登录
首页 >  Golang >  Go问答

如何在 Golang 中对带有换行符的输入数据进行 CDATA 编组

来源:stackoverflow

时间:2024-03-21 21:19:28 278浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《如何在 Golang 中对带有换行符的输入数据进行 CDATA 编组》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我正在尝试封送 xml 文件并分析或进行一些小的修改,然后将其封送回之前的相同格式。原始 xml 格式如下:



我无法编组到相同的输出。我不断得到

我尝试在解组之前删除 xml 中的换行符,但我确实需要保留换行符。我导出元帅的软件非常挑剔,如果换行符不匹配,就会出现错误。

以下代码的演示链接。

package main

import (
    "fmt"
    "log"
    "encoding/xml"
)

type structure struct {
    data struct {
        xmlname xml.name `xml:"data"`
        text string `xml:",cdata"`
    }
}

func main() {
    data := []byte(`

`)
    fmt.printf("%s\n\n", string(data))

    var unmarshaled structure
    err := xml.unmarshal(data, &unmarshaled)
    if err != nil {
        log.fatal(err)
    }
    fmt.printf("%+v\n\n", unmarshaled)

    // with indent
    b, err := xml.marshalindent(unmarshaled, "", "  ")
    if err != nil {
        log.fatal(err)
    }
    fmt.printf("%s\n\n", string(b))

    // without indent
    b, err = xml.marshal(unmarshaled)
    if err != nil {
        log.fatal(err)
    }
    fmt.printf("%s\n\n", string(b))
}

我需要元帅输出为:

不是:


解决方案


您可以尝试的一个选择是使用“,innerxml”而不是“,cdata”。但是,这会将字符串字段保留为原始 XML,并且其中包含 CDATA。如果这是您可以使用的东西,那么这是一个选择。如果没有,那么我认为没有办法通过 XML 解组来解决这个问题。它将把 cdata 规范化为单个连续字符串,并且会丢失 CDATA 标记的确切位置。如果您使用 xml.Decoder,您可能会更幸运。

终于介绍完啦!小伙伴们,这篇关于《如何在 Golang 中对带有换行符的输入数据进行 CDATA 编组》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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