Skip to content

Latest commit

 

History

History
75 lines (51 loc) · 2.5 KB

README.RU.md

File metadata and controls

75 lines (51 loc) · 2.5 KB

XML utils

Build Status GoDoc Go Report Card Software License

This don't stable version

Особенности реализации

  • Игнорировать prefix в xml tag

    Теперь xml:"prefix:name" воспринимается в Unmarshal как xml:"name"

    Это нужно для одинакового поведения Unmarshal/Marshal с префиксными тегами

  • Добавить поддержку xml.Unmarshaler

    Теперь нет необходимости править все реализации xml.Unmarshaler на xmlutils.Unmarshaler

  • Добавить проброс xmlutils.Decoder в xml.Unmarshaler

    Теперь в не зависимости от того как был запущен Unmarshal (от xml или от xmlutils) у вас есть возможность использовать xmlutils там где это нужно

  • Вынести все имеющиеся структуры из форка обратно в encoding/xml

    Сейчас это реализовано для большинства структур (такие как xml.StartElement, xml.Name, xml.Attr, xml.Token и прочие), но не исключаю что ещё есть что можно перенести

Проброс xmlutils.Decoder через интерфейс xml.UnmarshalXML

package main

import (
	"fmt"
	"encoding/xml"

	"github.com/mantyr/xmlutils"
)

type A struct {
	B struct {
		Data string `xml:"prefix:data"`
	}
}

func (a *A) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
	return xmlutils.NewTokenDecoder(d, start).Decode(&a.B)
}

func main() {
	data := `<a><prefix:data>test</prefix:data></a>`
	a := &A{}
	err := xml.Unmarshal([]byte(data), &a)
	fmt.Println(err)
	fmt.Println(a.B.Data)
	// Output:
	// <nil>
	// test
}

Installation

$ go get -u github.com/mantyr/xmlutils

Author

Oleg Shevelev