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

我正在尝试解析一个 xml:


附上 xml,因为这里太长了https://drive.google.com/file/d/1CPleC1gBAR6n7lcyiR_zVMEjkowo3gUU/view?usp=sharing


type 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 结构是空的

它就像结构是空的:输出:**



至尊宝的传说
浏览 130回答 1
1回答

犯罪嫌疑人X

如果你想要: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 mainimport (    "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º
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go