为了账号安全,请及时绑定邮箱和手机立即绑定

尝试在 golang 中解析 xml 但得到空结构

尝试在 golang 中解析 xml 但得到空结构

Go
至尊宝的传说 2023-03-15 14:21:55
我正在尝试解析一个 xml:附上 xml,因为这里太长了https://drive.google.com/file/d/1CPleC1gBAR6n7lcyiR_zVMEjkowo3gUU/view?usp=sharingtype L1CProduct struct {    XMLName xml.Name `xml:"n1:Level-1C_User_Product"`    N1GeneralInfo N1GeneralInfo `xml:"n1:General_Info"`}type N1GeneralInfo struct {    XMLName xml.Name `xml:"n1:General_Info"`    ProductInfo ProductInfo `xml:"Product_Info"`    SpectralInformationList SpectralInformationList `xml:"Product_Image_Characteristic>Spectral_Information_List"`}type SpectralInformationList struct {    XMLName xml.Name `xml:"Spectral_Information_List"`    SpectralInformation []SpectralInformation `xml:"Spectral_Information"`}type SpectralInformation struct {    XMLName xml.Name `xml:"Spectral_Information"`    BandId string `xml:"bandId,attr"`    PhysicalBand string `xml:"physicalBand,attr"`}type ProductInfo struct{    XMLName xml.Name `xml:"Product_Info"`    ProductStartTime string `xml:"PRODUCT_START_TIME"`    GenerationTime string `xml:"GENERATION_TIME"`    ProductUri string `xml:"PRODUCT_URI"`}func parseXml() {    // Open our xmlFile    // xmlPath := inProcessPath + "/MTD_MSIL1C.xml"    xmlPath := "/home/htc/Lizer/backend/InProcessResults/MTD_MSIL1C.xml"    xmlFile, err := os.Open(xmlPath)    // if we os.Open returns an error then handle it    if err != nil {        fmt.Println(err)    }    fmt.Println("Successfully Opened " + xmlPath)    // defer the closing of our xmlFile so that we can parse it later on    defer xmlFile.Close()    // read our opened xmlFile as a byte array.    byteValue, _ := ioutil.ReadAll(xmlFile)    fmt.Printf("\nData: %s", byteValue)    // we initialize our Users array    var users L1CProduct    // we unmarshal our byteArray which contains our    // xmlFiles content into 'users' which we defined above    xml.Unmarshal(byteValue, &users)    fmt.Println(users.N1GeneralInfo.ProductInfo.ProductStartTime + "º")    println(users.N1GeneralInfo.SpectralInformationList.SpectralInformation[1].BandId)}但是当文件被正确读取时,mi xml 结构是空的它就像结构是空的:输出:**
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

如果你想要:xml 中的解析器

喜欢

xml:"n1:Level-1C_User_Product"

应该:

xml:"https://psd-14.sentinel2.eo.esa.int/PSD/User_Product_Level-1C.xsd Level-1C_User_Product"

请参阅:在 GO 中解析 Xml 以获取标签中带有“:”的属性

下面是一个演示:

package main


import (

    "encoding/xml"

    "fmt"

    "os"

)


type L1CProduct struct {

    XMLName       xml.Name `xml:"https://psd-14.sentinel2.eo.esa.int/PSD/User_Product_Level-1C.xsd Level-1C_User_Product"`

    N1GeneralInfo N1GeneralInfo

}


type N1GeneralInfo struct {

    XMLName     xml.Name    `xml:"https://psd-14.sentinel2.eo.esa.int/PSD/User_Product_Level-1C.xsd General_Info"`

    ProductInfo ProductInfo `xml:"Product_Info"`

}

type ProductInfo struct {

    XMLName          xml.Name `xml:"Product_Info"`

    ProductStartTime string   `xml:"PRODUCT_START_TIME"`

    GenerationTime   string   `xml:"GENERATION_TIME"`

    ProductUri       string   `xml:"PRODUCT_URI"`

}


func parseXml() {

    // Open our xmlFile


    // xmlPath := inProcessPath + "/MTD_MSIL1C.xml"

    xmlPath := "./MTD_MSIL1C.xml"

    // read our opened xmlFile as a byte array.

    byteValue, _ := os.ReadFile(xmlPath)

    // we initialize our Users array

    var users L1CProduct


    err := xml.Unmarshal(byteValue, &users)

    if err != nil {

        fmt.Printf("%v\n", err)

    }

    fmt.Println(users.N1GeneralInfo.ProductInfo.ProductStartTime + "º")

}


func main() {

    parseXml()

}

以下是输出:


2022-11-09T16:55:19.024Zº


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信