1package xmlutil 2 3import ( 4 "encoding/xml" 5 "strings" 6) 7 8type xmlAttrSlice []xml.Attr 9 10func (x xmlAttrSlice) Len() int { 11 return len(x) 12} 13 14func (x xmlAttrSlice) Less(i, j int) bool { 15 spaceI, spaceJ := x[i].Name.Space, x[j].Name.Space 16 localI, localJ := x[i].Name.Local, x[j].Name.Local 17 valueI, valueJ := x[i].Value, x[j].Value 18 19 spaceCmp := strings.Compare(spaceI, spaceJ) 20 localCmp := strings.Compare(localI, localJ) 21 valueCmp := strings.Compare(valueI, valueJ) 22 23 if spaceCmp == -1 || (spaceCmp == 0 && (localCmp == -1 || (localCmp == 0 && valueCmp == -1))) { 24 return true 25 } 26 27 return false 28} 29 30func (x xmlAttrSlice) Swap(i, j int) { 31 x[i], x[j] = x[j], x[i] 32} 33