我正在尝试解析以下xml:<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <wd:Get_Workers_Response wd:version="v35.0" xmlns:wd="urn:com.workday/bsvc"> <wd:Request_References> <wd:Worker_Reference> <wd:ID wd:type="WID">11112222333444</wd:ID> <wd:ID wd:type="Employee_ID">123456789</wd:ID> </wd:Worker_Reference> </wd:Request_References> <wd:Response_Data> <wd:Worker> <wd:Worker_Descriptor>user xyz</wd:Worker_Descriptor> <wd:Worker_Data> <wd:Worker_ID>123456789</wd:Worker_ID> <wd:User_ID>user_one_id</wd:User_ID> <wd:Personal_Data> <wd:Contact_Data> <wd:Email_Address_Data> <wd:Email_Address>abc@gmail.com</wd:Email_Address> <wd:Usage_Data wd:Public="1"> <wd:Type_Data wd:Primary="1"> <wd:Type_Reference> <wd:ID wd:type="WID">12346780</wd:ID> <wd:ID wd:type="Communication_Usage_Type_ID">WORK</wd:ID> </wd:Type_Reference> </wd:Type_Data> </wd:Usage_Data> <wd:Email_Reference> <wd:ID wd:type="WID">0987654321</wd:ID> <wd:ID wd:type="Email_ID">EMAIL_REFERENCE-3-1</wd:ID> </wd:Email_Reference> <wd:ID>EMAIL_REFERENCE-3-1</wd:ID> </wd:Email_Address_Data> </wd:Contact_Data> </wd:Personal_Data>}我无法进入标签内部。由于冒号,解析似乎不起作用。我也尝试逃避冒号()。我需要来自此 xml 的以下值:, from 和 哪个位于 嵌套标记内<env:Body>env\:BodyWIDEmployee_IDWorker_ReferenceEmail_IDwd:Email_Address_Data任何帮助将不胜感激,我是xml解析的新手,所以可能是我在这里错过了一些东西。
1 回答

一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
您在结构标记中使用了错误的语法。
WID和Employee_ID的示例:
type wdID struct {
ID string `xml:"type,attr"`
Content string `xml:",chardata"`
}
type exampleStruct struct {
XMLName xml.Name `xml:"Envelope"`
WIDs []wdID `xml:"Body>Get_Workers_Response>Request_References>Worker_Reference>ID"`
}
此外,由于标签的名称会重复(多个“ID”),因此必须将它们解析为一个数组,在该数组中可以获得区分它们的唯一属性(wdID结构)。
使用您提供的较小版本的 XML 的工作示例进入 Playground:https://play.golang.org/p/BS8crPQ7G1n
编辑:https://golang.org/pkg/encoding/xml/#Unmarshal 如果您在XML Unmarshal'er的评论中阅读,则可以找到有关结构标记细节的一些花絮
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消