array.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package xml
  2. // arrayMemberWrapper is the default member wrapper tag name for XML Array type
  3. var arrayMemberWrapper = StartElement{
  4. Name: Name{Local: "member"},
  5. }
  6. // Array represents the encoding of a XML array type
  7. type Array struct {
  8. w writer
  9. scratch *[]byte
  10. // member start element is the array member wrapper start element
  11. memberStartElement StartElement
  12. // isFlattened indicates if the array is a flattened array.
  13. isFlattened bool
  14. }
  15. // newArray returns an array encoder.
  16. // It also takes in the member start element, array start element.
  17. // It takes in a isFlattened bool, indicating that an array is flattened array.
  18. //
  19. // A wrapped array ["value1", "value2"] is represented as
  20. // `<List><member>value1</member><member>value2</member></List>`.
  21. // A flattened array `someList: ["value1", "value2"]` is represented as
  22. // `<someList>value1</someList><someList>value2</someList>`.
  23. func newArray(w writer, scratch *[]byte, memberStartElement StartElement, arrayStartElement StartElement, isFlattened bool) *Array {
  24. var memberWrapper = memberStartElement
  25. if isFlattened {
  26. memberWrapper = arrayStartElement
  27. }
  28. return &Array{
  29. w: w,
  30. scratch: scratch,
  31. memberStartElement: memberWrapper,
  32. isFlattened: isFlattened,
  33. }
  34. }
  35. // Member adds a new member to the XML array.
  36. // It returns a Value encoder.
  37. func (a *Array) Member() Value {
  38. v := newValue(a.w, a.scratch, a.memberStartElement)
  39. v.isFlattened = a.isFlattened
  40. return v
  41. }