Golang:解析组的XML元素值和属性

huangapple go评论96阅读模式
英文:

Golang: Parse both XML element value and attributes for groups

问题

我有一个像这样的XML结构:

<RootLevel status="new" timestamp="1383259529" xmlns="http://someplace.com">
    <Item active="1" status="new" itemid="451254">
        <SubItem active="1" recent="false" usertext="No idea" id="78421">
            <SubItemField active="1" ready="no" type="1">1.4</SubItemField>
            <SubItemField active="1" ready="yes" type="2">4.5</SubItemField>
        </SubItem>
    </Item>
</RootLevel>

我不知道如何获取SubItemField元素的值和属性,我的代码大致如下:

type RootLevel struct {
    XMLName xml.Name `xml:"RootLevel"`
    ...
    Item    []Item
}

type Item struct {
    ...
    SubItem   []SubItem
}

type SubItem struct {
    ...
    SubItemField    []SubItemField
}

type SubItemField struct {
    Active bool `xml:"active,attr"`
    Ready string `xml:"ready,attr"`
}

我需要获取属性和值,但我所知道的唯一方法就是使用

SubItemField  []float32

而不是我的自定义类型。顺便说一下,我正在使用xml.Unmarshal。

有什么想法吗?

谢谢。

英文:

I have an XML structure like this:

&lt;RootLevel status=&quot;new&quot; timestamp=&quot;1383259529&quot; xmlns=&quot;http://someplace.com&quot;&gt;
    &lt;Item active=&quot;1&quot; status=&quot;new&quot; itemid=&quot;451254&quot;&gt;
        &lt;SubItem active=&quot;1&quot; recent=&quot;false&quot; usertext=&quot;No idea&quot; id=&quot;78421&quot;&gt;
            &lt;SubItemField active=&quot;1&quot; ready=&quot;no&quot; type=&quot;1&quot;&gt;1.4&lt;/SubItemField&gt;
            &lt;SubItemField active=&quot;1&quot; ready=&quot;yes&quot; type=&quot;2&quot;&gt;4.5&lt;/SubItemField&gt;
        &lt;/SubItem&gt;
    &lt;/Item&gt;
&lt;/RootLevel&gt;

I don't know how I can gather both values and attributes for the SubItemField elements, my code is something like:

type RootLEvel struct {
    XMLName xml.Name `xml:&quot;RootLevel&quot;`
    ...
    Item    []Item
}

type Item struct {
    ...
    SubItem   []SubItem
}

type SubItem struct {
    ...
    SubItemField    []SubItemField
}

type SubItemField struct {
    Active bool `xml:&quot;active,attr&quot;`
    Ready string `xml:&quot;ready,attr&quot;`
}

I need both attributes and values but the only way to get values that I know is just use

SubItemField  []float32

instead of my custom type. I am using xml.Unmarshal btw.

Any idea?

Thanks.

答案1

得分: 50

我自己弄清楚了如何做到这一点,我只需要在我的结构体中添加一个与xml:&quot;,chardata&quot;匹配的新属性,就像这样:

type SubItemField struct {
    Value  float32 `xml:&quot;,chardata&quot;`
    Active bool    `xml:&quot;active,attr&quot;`
    Ready  string  `xml:&quot;ready,attr&quot;`
}

希望这对某人有所帮助,因为没有关于这个的文档或示例。

英文:

I figured myself how to do that, I had simply to add a new property in my struct that match xml:&quot;,chardata&quot; so it looks like:

type SubItemField struct {
    Value  float32 `xml:&quot;,chardata&quot;`
    Active bool    `xml:&quot;active,attr&quot;`
    Ready  string  `xml:&quot;ready,attr&quot;`
}

I hope that can help someone cos there is no documentation or examples about this.

huangapple
  • 本文由 发表于 2013年12月16日 05:38:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/20600137.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定