So after talking a look at the xml package again I noticed the UnmarshalXML 
trap. So I used that. Here's the solution I went with.

I wrapped the decoder in a recursive decent parser to make the actual 
UnmarshalXML method readable.

https://play.golang.org/p/dylYB0KsyL

It uses an example from the OpenGL registry where you can see that 
parameters use mixed content. They annotate the base type "ptype" and 
"name" but the rest is left as text (or so called chardata).

John

On Friday, January 6, 2017 at 11:01:12 AM UTC+1, Egon wrote:
>
> You can use xml.Decoder (https://play.golang.org/p/fkp-t4_vee).
>
> Can you show in which place OpenGL registry contains such entries? Just 
> interested in why it is encoded that way.
>
> Also take a look at https://github.com/go-gl/glow
>
> + Egon
>
> On Friday, 6 January 2017 11:28:42 UTC+2, John Leidegren wrote:
>>
>> OK, then I give up. If that is how it works.
>>
>> The source XML file I'm reading is from the OpenGL registry and I cannot 
>> change the way they structured that file. What baffles me is that I can't 
>> seem to simply concat the text nodes either.
>>
>> I'd like to, as an option, just read the the concatenated text nodes from 
>> a sub tree as chardata but it appears as if it just ignores descendants.
>>
>> I'll fallback to innerxml and parse that manually, which is a little 
>> painful to have to do but doable.
>>
>> John 
>>
>> On Thursday, January 5, 2017 at 9:38:17 PM UTC+1, Shawn Milochik wrote:
>>>
>>> On Thu, Jan 5, 2017 at 2:40 PM, John Leidegren <john.le...@gmail.com> 
>>> wrote:
>>>
>>>> See https://play.golang.org/p/XjKdm7Pooh
>>>>
>>>> I was hoping to get back a, b followed by c but I get a, c then b. I 
>>>> just can't get this to work.
>>>>
>>>> How is it even possible for it to read character data from before and 
>>>> after the B node?
>>>>
>>>>
>>> The problem is that there is no C. A gets the characters from the <el> 
>>> element, and B gets the b from the <B> element:
>>>
>>> https://play.golang.org/p/czAXksSYMo
>>>
>>> I don't think you can get what you want from the XML unmarshal if 'a' 
>>> and 'c' are going to be chardata in the same element. You may just have to 
>>> put them in separate elements or parse the 'A' value to get the two 
>>> separate strings.
>>>
>>>
>>>

-- 
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.

Reply via email to