Разбор в GO xml, который имеет элементы с произвольным окончанием - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь проанализировать xml-файл, содержащий элементы с произвольными окончаниями

Пример xml с Array0 и Array1:

<GetPriceChangesForReseller>
          <PriceContractArray0 actualtype="PriceContract">
            <EndUserPrice>1990,00</EndUserPrice>     
          </PriceContractArray0>
          <PriceContractArray1 actualtype="PriceContract">        
            <EndUserPrice>2290,00</EndUserPrice>
          </PriceContractArray1>  
</GetPriceChangesForReseller>

Как мне работать с этим делом?

часть моего кода:

package main

import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "os"
)


type GetPriceChangesForReseller struct {
    XMLName                    xml.Name             `xml:"GetPriceChangesForReseller"`
    GetPriceChangesForReseller []PriceContractArray `xml:"PriceContractArray"`
}


type PriceContractArray struct {
    XMLName             xml.Name `xml:"PriceContractArray"`
    Price               string   `xml:"Price"`
func main() {

// Open our xmlFile
xmlFile, err := os.Open("GetPriceChangesForReseller.xml")
// if we os.Open returns an error then handle it
if err != nil {
    fmt.Println(err)
}

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

вы можете попробовать xmlquery , его легко анализировать и запрашивать для XML-документа, без определенных типов, таких как структуры.

doc, err := xmlquery.Parse(strings.NewReader(s))
    if err != nil {
        panic(err)
    }
    for _, n := range xmlquery.Find(doc, "//GetPriceChangesForReseller/*") {
        fmt.Printf("%s price: %s\n", n.Data, n.SelectElement("EndUserPrice").InnerText())
    }

PriceContractArray0 цена: 1990,00

PriceContractArray1 цена: 2290,00

0 голосов
/ 21 февраля 2019

Вы можете использовать следующую структуру ( попробовать онлайн! ):

type GetPriceChangesForReseller struct {
    XMLName xml.Name        `xml:"GetPriceChangesForReseller"`
    Items   []PriceContract `xml:",any"`
}

type PriceContract struct {
    Price string `xml:"EndUserPrice"`
}

Это должно работать.

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