On Mon, 10 Oct 2016 22:10:37 -0700 (PDT) Scott <gr8whi...@gmail.com> wrote:
> I'm trying to Marshal XML where an element has mixed content: > https://www.w3.org/TR/REC-xml/#sec-mixed-content > > I tried just using []interface{} but if I put in just a string, > Marshal surrounds each string with the name of the slice: > > https://play.golang.org/p/erh3mQmrZD > > I'm trying to get the output to be: > <root> > <element1>foo</element1> > hello > <element2>bar</element2> > world > </root> > > Any ideas? Yes. "\nhello\n" and "\nworld\n" are what is called "character data" in XML parlance. So if you go with the standard approach to marshaling data to XML -- via a struct type with properly annotated fields -- you should annotate the fields for your character data chunks with the ",chardata" modifiers. See the docs on encoding/xml.Marshal function for more info. Here's a working example: --------8<-------- package main import ( "bytes" "encoding/xml" "fmt" ) type E struct { XMLName struct{} `xml:"root"` E1 string `xml:"element1"` A string `xml:",chardata"` E2 string `xml:"element2"` Z string `xml:",chardata"` } func main() { e := E{ E1: "foo", A: "hello", E2: "bar", Z: "world", } var b bytes.Buffer enc := xml.NewEncoder(&b) enc.Indent("", "\t") err := enc.Encode(&e) if err != nil { panic(err) } err = enc.Flush() if err != nil { panic(err) } fmt.Println(b.String()) } --------8<-------- Playground link: <https://play.golang.org/p/pWaYmOT675> Please note that whitespace is only insignificant in XML where *you* think it is (that is, there's no inherent semantics of it in the XML spec. So you should be aware that in your example your character data chunks are not "hello" and "world" but rather LF SP SP SP SP "hello" LF and LF SP SP SP SP "world" LF , respectively (provided linebreaks are sole LFs) So if you really want those bits of whitespace to be present in the resulting XML document you have to make sure you embed them to your fields annotated with ",chardata". Hope this helps. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.