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