gpt4 book ai didi

xml - 解码具有可变子类型的 XML

转载 作者:IT王子 更新时间:2023-10-29 02:10:14 25 4
gpt4 key购买 nike

我有如下所示的 XML:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<smses count="500">
<sms id="1" text="hi" sms_specific_field="blah" />
<sms id="2" text="what's up?" sms_specific_field="blah" />
<mms id="3" text="null" text_only="0">
<parts>
<part seq="-1" content="image/jpeg" text="null" data="base64_data_here==" />
<part seq="0" content="text/plain" text="Check it out!" />
</parts>
</mms>
<sms id="4" text="what's up?" sms_specific_field="blah" />
</smses>

smsessmsmms 子元素可以以任何顺序出现。我想将这些数据解码为 native Go 结构。我想我可以为这样的人使用一些接口(interface):

Messages []interface{} `xml:",any"`  // not sure if this is correct

但是我该如何将其放入每种类型的编码结构中呢?

我正在考虑像这样接近它,但不确定这是否适用于涵盖两者,并且不想花所有时间为将具有更多属性的结构编写这个,如果整个方法无论如何都不起作用:

type Messages struct {
XMLName xml.Name `xml:"smses"`
Count string `xml:"count,attr"`
MessageList []Message `xml:",any"` // <-- will this work?
}

type Message struct {
SMS SMS `xml:"sms"`
MMS MMS `xml:"mms"`
ID string `xml"id,attr"`
Text string `xml:"text,attr"`
}

type SMS struct {
XMLName xml.Name `xml:"sms"`
SMSSpecField string `xml:"sms_specific_field,attr"`
}

type MMS struct {
XMLName xml.Name `xml:"mms"`
TextOnly string `xml:"text_only,attr"`
Parts []Part `xml:"parts"`
}

... And so on - but I don't know if this approach works / makes sense

如何设计我的结构以解码此 XML(包括属性和子项)?

最佳答案

一种可能的方法是这样的:

type Messages struct {
XMLName xml.Name `xml:"smses"`
Count string `xml:"count,attr"`
MMS []MMS `xml:"mms"`
SMS []SMS `xml:"sms"`
}

这会将所有子 mms 元素解码为 MMS 并将所有子 sms 元素解码为 SMS。然后,您可以根据需要迭代这些以进行进一步处理,例如将它们嵌入到 Message 对象中并将它们放入组合 slice 中。但是,这将丢失原始 XML 源顺序。

关于xml - 解码具有可变子类型的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48795458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com