在标记中用冒号解析复杂的嵌套 xml
Parsing complex nested xml with colon in tags
我正在尝试解析以下 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 的以下值:来自 Worker_Reference
的 WID
、Employee_ID
和 wd:Email_Address_Data
[=20= 中的嵌套标签内的 Email_ID
]
非常感谢任何帮助,我是 xml 解析的新手,所以我可能在这里遗漏了一些东西。
谢谢。
您在结构标签中使用了错误的语法。
仅 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 的较小版本的工作示例去游乐场:https://play.golang.org/p/BS8crPQ7G1n
编辑:https://golang.org/pkg/encoding/xml/#Unmarshal 如果您阅读 XML Unmarshal'er 的评论,您可以找到一些关于结构标记细节的花絮
我正在尝试解析以下 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 的以下值:来自 Worker_Reference
的 WID
、Employee_ID
和 wd:Email_Address_Data
[=20= 中的嵌套标签内的 Email_ID
]
非常感谢任何帮助,我是 xml 解析的新手,所以我可能在这里遗漏了一些东西。
谢谢。
您在结构标签中使用了错误的语法。
仅 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 的较小版本的工作示例去游乐场:https://play.golang.org/p/BS8crPQ7G1n
编辑:https://golang.org/pkg/encoding/xml/#Unmarshal 如果您阅读 XML Unmarshal'er 的评论,您可以找到一些关于结构标记细节的花絮