Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在标记中使用冒号解析复杂的嵌套xml_Xml_Go_Xml Parsing_Workday Api - Fatal编程技术网

在标记中使用冒号解析复杂的嵌套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

我正在尝试解析以下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>


                 </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"`
}