代码之家  ›  专栏  ›  技术社区  ›  Godzilla74

找不到未编组的XML节点

go
  •  0
  • Godzilla74  · 技术社区  · 6 年前

    我试图解开一个xml文件,但它找不到我的根节点。 snapshot ,这使我无法解开其余的文件。

    我打电话来 parser.go main.go ,以及 Validate 功能。

    鹦鹉围棋

    type Parser struct {
        file     *ConfigXML
        filepath string
    }
    
    //Load the file
    func (parser *Parser) Load() error {
        b, err := helpers.LoadFile(parser.filepath)
    
        if err != nil {
            return err
        }
    
        parser.file = nil
        xml.Unmarshal(b, &parser.file)
    
        return nil
    }
    
    func (parser *Parser) Validate() error {
    
        if len(parser.file.snapshot) == 0 {
            return fmt.Errorf("node snapshot does not exist")
        }
    
        return nil
    }
    

    当我的xml文件很大时,我将发布一个片段:

    <?xml version='1.0' encoding='UTF-8'?>
     <snapshot>
      <ENBEquipment id="233443234543" model="XYZ" version="LR_16_02_L">
       <attributes>
        <administrativeState>unlocked</administrativeState>
       </attributes>
      </ENBEquipment>
     </snapshot>
    

    我创建的结构用于解组到:

    type ConfigXML struct {
        snapshot []Snapshot
        FileName string
    }
    
    // Snapshot is root <snapshot>
    type Snapshot struct {
        ENBEquipment []ENBEquipment
    }
    
    // ENBEquipment subtag of <snapshot> -> <ENBEquipment>
    type ENBEquipment struct {
        ID              string `xml:"id,attr"`
        DeviceName      string `xml:"id,attr"`
        SoftwareVersion string `xml:"version,attr"`
        ElementType     string `xml:"model,attr"`
        Enb             []Enb
    }
    

    但是当我试图和 go run main.go 我得到:

    ERRO[2018-06-12 09:45:34] parsing failed    error="node snapshot does not exist" filename=/tmp/datain/xyz/123/agg/233443234543.xml
    

    如果我排除了 快照 ,文件解组正常。为什么找不到节点?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Tyler Bui-Palsulich    6 年前

    尝试导出 snapshot 并添加一个struct标记来指示名称。

    xml.Unmarshal 使用反射填充结构。因此,需要导出结构的元素。

    type ConfigXML struct {
        Snapshot []Snapshot `xml:"snapshot"`
        FileName string
    }
    

    the GoDoc (搜索“exported”并查看示例)了解有关如何 xml.解组 作品。