在标记中使用冒号解析复杂的嵌套xml
我正在尝试解析以下xml:在标记中使用冒号解析复杂的嵌套xml,xml,go,xml-parsing,workday-api,Xml,Go,Xml Parsing,Workday Api,我正在尝试解析以下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:Reques
<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>
</wd:Worker_Data>
</wd:Worker>
</wd:Response_Data>
</wd:Get_Workers_Response>
</env:Body>
</env:Envelope>
我无法进入
标签。由于冒号的原因,解析似乎不起作用。我也尝试了转义冒号(env\:Body
)。
我需要此xml中的以下值:WID
,Worker\u Reference
中的Employee\u ID
和Email\u ID
,它们位于wd:Email\u Address\u数据中的嵌套标记内
任何帮助都将不胜感激,我对xml解析还不熟悉,所以我可能在这里遗漏了一些东西
谢谢。您在结构标记中使用了错误的语法
仅WID和员工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 struct)
使用您提供的XML较小版本的工作示例:
编辑:如果您阅读了XML解组器的评论,您可以找到一些关于结构标记细节的花絮非常感谢您,我想到了这个主意,并按照您的示例制作了结构,它成功了。
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"`
}