登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  Golang >  Go问答

关于Go读取XML中Worksheet的问题

来源:SegmentFault

时间:2023-01-07 14:29:11 159浏览 收藏

本篇文章给大家分享《关于Go读取XML中Worksheet的问题》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

Go小白,在开发过程中遇到了读取xml的操作,但是xml里的数据是以Excel中Worksheet结构存储的,请问该如何正确提取呢?
↓ xml中的Worksheet ↓

 zhangyikunuser2013-10-21T08:50:44Z2013-11-22T02:12:41Z15.0077851884000FalseFalse收货/送检单号是否加急送检人检验员送检时间检验完成时间物料编码物料名称供应商收货数量供应商批次存放位置物料状态检验破坏数量检验数量检验不合格数量检验状态检验结果审核状态备注XXXXXXXEBXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000待检验未检验未检验
91200120032211FalseFalse

image.png

正确答案

主要用标准库 encoding/xml 解析 xml

package main

import "fmt"
import "encoding/xml"

type Workbook struct {
    XMLName                xml.Name               `xml:"Workbook"`
    Text                   string                 `xml:",chardata"`
    Xmlns                  string                 `xml:"xmlns,attr"`
    O                      string                 `xml:"o,attr"`
    X                      string                 `xml:"x,attr"`
    Ss                     string                 `xml:"ss,attr"`
    Html                   string                 `xml:"html,attr"`
    DocumentProperties     DocumentProperties     `xml:"DocumentProperties"`
    OfficeDocumentSettings OfficeDocumentSettings `xml:"OfficeDocumentSettings"`
    ExcelWorkbook          ExcelWorkbook          `xml:"ExcelWorkbook"`
    Styles                 Styles                 `xml:"Styles"`
    Worksheet              Worksheet              `xml:"Worksheet"`
}

type DocumentProperties struct {
    Text   string `xml:",chardata"`
    Xmlns  string `xml:"xmlns,attr"`
    Author struct {
        Text string `xml:",chardata"`
    } `xml:"Author"`
    LastAuthor struct {
        Text string `xml:",chardata"`
    } `xml:"LastAuthor"`
    Created struct {
        Text string `xml:",chardata"`
    } `xml:"Created"`
    LastSaved struct {
        Text string `xml:",chardata"`
    } `xml:"LastSaved"`
    Version struct {
        Text string `xml:",chardata"`
    } `xml:"Version"`
}
type OfficeDocumentSettings struct {
    Text     string `xml:",chardata"`
    Xmlns    string `xml:"xmlns,attr"`
    AllowPNG struct {
        Text string `xml:",chardata"`
    } `xml:"AllowPNG"`
}
type ExcelWorkbook struct {
    Text         string `xml:",chardata"`
    Xmlns        string `xml:"xmlns,attr"`
    WindowHeight struct {
        Text string `xml:",chardata"`
    } `xml:"WindowHeight"`
    WindowWidth struct {
        Text string `xml:",chardata"`
    } `xml:"WindowWidth"`
    WindowTopX struct {
        Text string `xml:",chardata"`
    } `xml:"WindowTopX"`
    WindowTopY struct {
        Text string `xml:",chardata"`
    } `xml:"WindowTopY"`
    ProtectStructure struct {
        Text string `xml:",chardata"`
    } `xml:"ProtectStructure"`
    ProtectWindows struct {
        Text string `xml:",chardata"`
    } `xml:"ProtectWindows"`
}
type Styles struct {
    Text  string `xml:",chardata"`
    Style []struct {
        Text      string `xml:",chardata"`
        ID        string `xml:"ID,attr"`
        Name      string `xml:"Name,attr"`
        Parent    string `xml:"Parent,attr"`
        Alignment struct {
            Text       string `xml:",chardata"`
            Vertical   string `xml:"Vertical,attr"`
            Horizontal string `xml:"Horizontal,attr"`
        } `xml:"Alignment"`
        Borders struct {
            Text string `xml:",chardata"`
        } `xml:"Borders"`
        Font struct {
            Text     string `xml:",chardata"`
            FontName string `xml:"FontName,attr"`
            CharSet  string `xml:"CharSet,attr"`
            Size     string `xml:"Size,attr"`
            Color    string `xml:"Color,attr"`
        } `xml:"Font"`
        Interior struct {
            Text    string `xml:",chardata"`
            Color   string `xml:"Color,attr"`
            Pattern string `xml:"Pattern,attr"`
        } `xml:"Interior"`
        NumberFormat struct {
            Text   string `xml:",chardata"`
            Format string `xml:"Format,attr"`
        } `xml:"NumberFormat"`
        Protection struct {
            Text      string `xml:",chardata"`
            Protected string `xml:"Protected,attr"`
        } `xml:"Protection"`
    } `xml:"Style"`
}
type Worksheet struct {
    Text  string `xml:",chardata"`
    Name  string `xml:"Name,attr"`
    Table struct {
        Text                string `xml:",chardata"`
        ExpandedColumnCount string `xml:"ExpandedColumnCount,attr"`
        ExpandedRowCount    string `xml:"ExpandedRowCount,attr"`
        FullColumns         string `xml:"FullColumns,attr"`
        FullRows            string `xml:"FullRows,attr"`
        DefaultColumnWidth  string `xml:"DefaultColumnWidth,attr"`
        DefaultRowHeight    string `xml:"DefaultRowHeight,attr"`
        Column              []struct {
            Text    string `xml:",chardata"`
            StyleID string `xml:"StyleID,attr"`
            Width   string `xml:"Width,attr"`
            Span    string `xml:"Span,attr"`
            Index   string `xml:"Index,attr"`
        } `xml:"Column"`
        Row []struct {
            Text          string `xml:",chardata"`
            AutoFitHeight string `xml:"AutoFitHeight,attr"`
            StyleID       string `xml:"StyleID,attr"`
            Cell          []struct {
                Text    string `xml:",chardata"`
                StyleID string `xml:"StyleID,attr"`
                Data    struct {
                    Text string `xml:",chardata"`
                    Type string `xml:"Type,attr"`
                } `xml:"Data"`
            } `xml:"Cell"`
        } `xml:"Row"`
    } `xml:"Table"`
    WorksheetOptions struct {
        Text      string `xml:",chardata"`
        Xmlns     string `xml:"xmlns,attr"`
        PageSetup struct {
            Text   string `xml:",chardata"`
            Header struct {
                Text   string `xml:",chardata"`
                Margin string `xml:"Margin,attr"`
            } `xml:"Header"`
            Footer struct {
                Text   string `xml:",chardata"`
                Margin string `xml:"Margin,attr"`
            } `xml:"Footer"`
            PageMargins struct {
                Text   string `xml:",chardata"`
                Bottom string `xml:"Bottom,attr"`
                Left   string `xml:"Left,attr"`
                Right  string `xml:"Right,attr"`
                Top    string `xml:"Top,attr"`
            } `xml:"PageMargins"`
        } `xml:"PageSetup"`
        Unsynced struct {
            Text string `xml:",chardata"`
        } `xml:"Unsynced"`
        Print struct {
            Text             string `xml:",chardata"`
            ValidPrinterInfo struct {
                Text string `xml:",chardata"`
            } `xml:"ValidPrinterInfo"`
            PaperSizeIndex struct {
                Text string `xml:",chardata"`
            } `xml:"PaperSizeIndex"`
            HorizontalResolution struct {
                Text string `xml:",chardata"`
            } `xml:"HorizontalResolution"`
            VerticalResolution struct {
                Text string `xml:",chardata"`
            } `xml:"VerticalResolution"`
        } `xml:"Print"`
        Selected struct {
            Text string `xml:",chardata"`
        } `xml:"Selected"`
        Panes struct {
            Text string `xml:",chardata"`
            Pane struct {
                Text   string `xml:",chardata"`
                Number struct {
                    Text string `xml:",chardata"`
                } `xml:"Number"`
                ActiveRow struct {
                    Text string `xml:",chardata"`
                } `xml:"ActiveRow"`
                ActiveCol struct {
                    Text string `xml:",chardata"`
                } `xml:"ActiveCol"`
            } `xml:"Pane"`
        } `xml:"Panes"`
        ProtectObjects struct {
            Text string `xml:",chardata"`
        } `xml:"ProtectObjects"`
        ProtectScenarios struct {
            Text string `xml:",chardata"`
        } `xml:"ProtectScenarios"`
    } `xml:"WorksheetOptions"`
}

func main() {
    var book Workbook
    err := xml.Unmarshal([]byte(xmldata), &book)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(book.Worksheet.Table.Row)
}

var xmldata = `
 zhangyikunuser2013-10-21T08:50:44Z2013-11-22T02:12:41Z15.0077851884000FalseFalse收货/送检单号是否加急送检人检验员送检时间检验完成时间物料编码物料名称供应商收货数量供应商批次存放位置物料状态检验破坏数量检验数量检验不合格数量检验状态检验结果审核状态备注XXXXXXXEBXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000待检验未检验未检验
91200120032211FalseFalse
`

结构体可以使用xml转go结构体进行快速转换

上述代码打印输出了excel中的两行数据,你可以根据自己的需要进行处理,当前在结构体 Workbook中你先可以只定义你想要解析的字段进行提取。

注意: 你提供的xml数据中,第一行的标签 缺一个 , 我提供的代码中已经做了补充

今天关于《关于Go读取XML中Worksheet的问题》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

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