Не находите немаршалированный узел XML - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь разархивировать файл XML, но он не находит мой корневой узел snapshot, что не дает мне возможности разархивировать оставшуюся часть моего файла.

Я звоню parser.go из main.go, а также функция Validate.

parser.go

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

Если я уберу Валидацию snapshot, файл будет отменен.Почему это не найти узел?

1 Ответ

0 голосов
/ 12 июня 2018

Попробуйте экспортировать snapshot и добавьте тег структуры, чтобы указать имя.

xml.Unmarshal использует отражение для заполнения структуры.Таким образом, элементы структуры должны быть экспортированы.

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

См. GoDoc (найдите «exported» и посмотрите пример) для получения дополнительной информации о том, как xml.Unmarshalработы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...