func main() { // fmt.Println(string(data)) rdr := bytes.NewReader(data) var m mxj.Map var err error // We read processing docs sequentially. // Un-rooted ProcInst or Comments are processed AND just reencoded. (XmlSeqIndent() knows how, now.) for m, err = mxj.NewMapXmlSeqReader(rdr); m != nil || err != io.EOF; m, err = mxj.NewMapXmlSeqReader(rdr) { if err != nil { if err != mxj.NO_ROOT { fmt.Println("NewMapXmlSeq err:", err) fmt.Println("m:", m) } else if m != nil { x, _ := m.XmlSeqIndent("", " ") fmt.Println(string(x)) } continue } // fmt.Println(m.StringIndent()) // We have Two different arrays of Items in the XML doc, one nested in the other. if err = copyCmts(m, "WebTest.Items"); err != nil { fmt.Println("err:", err) } if err = copyCmts(m, "WebTest.Items.TransactionTimer.Items"); err != nil { fmt.Println("err:", err) } // re-encode the map with the Items.Comment[#seq==n].#attr.CommentText // values copied to the Items.Request[#seq==n+1].#attr.ReportingName elements. b, err := m.XmlSeqIndent("", " ") if err != nil { fmt.Println("XmlIndent err:", err) return } fmt.Println(string(b)) } }