Как разобрать XML ответ с помощью одного тега - PullRequest
0 голосов
/ 05 августа 2020

Это мой XML ответ

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">{"journalseq":"7002924","statuscode":"0002","statusdesc":"Date placed : Invalid Date","msgsockheader":["data","data"],"msgmwheader":["data","data"],"msgmbheader":["data","data"],"msgmbmessage":["data","data"]}</string>

, как показано выше, у него только один тег со структурой внутри. Я уже создаю структуру для ее анализа следующим образом:

type Data struct {
        xml.Name `xml:"string"`
    }

    type DoMBASEHoldAmountResult struct {
        XMLName    xml.Name
        Data       Data
    }

    var soapEnvelope DoMBASEHoldAmountResult

    // parse for hold response
    xml.Unmarshal(input, &soapEnvelope)

, но внутри soapEnvelope ничего нет. Я не нахожу ответа в stackoverflow, и все, что я могу найти, это когда на XML много тегов. как размаршалл XML вот так? Более того, как я могу просто взять некоторые данные для ответа? скажем, я просто хочу взять journalSeq и одни данные в массиве msgsockheader в качестве своего ответа, мне все равно нужно все проанализировать, поставить на удар, а затем из этой структуры я выберу каждое значение, которое мне нужно?

1 Ответ

2 голосов
/ 05 августа 2020

Вам необходимо убедиться, что xmlname root struct (DoMBASEHoldAmountResult) соответствует имени элемента xml s root. А чтобы демаршалировать содержимое элемента, которому соответствует структура с полем xml .Name, вы можете использовать поле []byte или string и опцию тега innerxml.

type DoMBASEHoldAmountResult struct {
    XMLName xml.Name `xml:"string"`
    String  string   `xml:",innerxml"`
}

var soapEnvelope DoMBASEHoldAmountResult

// parse for hold response
if err := xml.Unmarshal(input, &soapEnvelope); err != nil {
    panic(err)
}

fmt.Println(soapEnvelope.String)

https://play.golang.org/p/l4Coz9habxa

...