@lemme
Frontend

Как можно обработать поля в структуре?

Привет! Подскажите пожалуйста, как можно обрабатывать поля в структуре?

Например, есть `xml` файл, в котором некоторые поля кривые, например, много пробелов, которые хочется тримить

<Document>
    <Price>100.00</Price>
</Document>
<Document>
    <Price>                 500.00</Price>
</Document>


Есть типичный код, который преобразует этот файл в json

type Feed struct {
  Products []Product `xml:"Document" json:"products""`
}

type Product struct {
  Price string `xml:"Price" json:"price"`
}

func main() {
	xmlFile, err := os.Open("feed.xml")
	defer xmlFile.Close()

	if err != nil {
		log.Fatal(err)
	}

	byteValue, _ := ioutil.ReadAll(xmlFile)

	var feed Feed

	xml.Unmarshal(byteValue, &feed)

	b, err := json.Marshal(feed)

	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(b))
}


Результат будет таким

{
  "products": [
    { "price": "100.00" },
    { "price": "       500.00" }
  ]
}


А хочется обработать поля с ценой (например) и убрать из нее лишние пробелы

{
  "products": [
    { "price": "100.00" },
    { "price": "500.00" }
  ]
}
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
bitniks
@bitniks
Go/PHP/Symfony developer
Реализовать кастомный UnmarshalXML
func (p *Product) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
	v := struct {
		Price string `xml:"Price"`
	}{}
	d.DecodeElement(&v, &start)
	p.Price = strings.Trim(v.Price, " ")
	return nil
}

https://play.golang.org/p/-U6lNP2CWDs
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы