मैं निम्नलिखित 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>

मैंने इस संरचना की कोशिश की:

type ElementOne struct {
    XMLName xml.Name `xml:"Envelope"`
    Bar     interface{}    `xml:"env:Body>wd:Get_Workers_Response "`
}

मैं <env:Body> टैग के अंदर नहीं जा पा रहा हूं। कोलन के कारण पार्सिंग काम नहीं कर रहा है। मैंने कोलन से भी बचने की कोशिश की (env\:Body)। मुझे इस xml से निम्नलिखित मानों की आवश्यकता है: WID, Employee_ID Worker_Reference से और Email_ID जो wd:Email_Address_Data में नेस्टेड टैग के अंदर है।

किसी भी मदद की वास्तव में सराहना की जाएगी, मैं एक्सएमएल पार्सिंग के लिए नया हूं इसलिए ऐसा हो सकता है कि मुझे यहां कुछ याद आ रहा है।

धन्यवाद।

0
ShahtajK 11 फरवरी 2021, 18:22

1 उत्तर

सबसे बढ़िया उत्तर

आप स्ट्रक्चर टैग में गलत सिंटैक्स का उपयोग कर रहे हैं।

केवल 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"`
}

साथ ही, चूंकि आपके टैग के नाम खुद को दोहराते हैं (एकाधिक "आईडी"), आपको उन्हें एक सरणी में पार्स करना होगा जहां आपको अद्वितीय विशेषता मिलती है जो उन्हें अलग करती है (wdID संरचना)।

आपके द्वारा दिए गए XML के छोटे संस्करण के कार्यशील उदाहरण के साथ खेल के मैदान में जाएं: https://play.golang.org /p/BS8crPQ7G1n

संपादित करें: https://golang.org/pkg/encoding/xml/#Unmarshal यदि आप XML Unmarshal'er की टिप्पणियों में पढ़ते हैं तो आप संरचना टैगिंग के लिए विशिष्टताओं के बारे में कुछ जानकारी प्राप्त कर सकते हैं

1
11 फरवरी 2021, 19:50
1
बहुत बहुत धन्यवाद, मुझे विचार मिला और आपके उदाहरण के बाद संरचना बनाई और यह काम किया।
 – 
ShahtajK
12 फरवरी 2021, 09:03