2017-06-02 56 views
0

我有XML,我想解组地址信息到其在数组作为我的结构的一部分:Golang解组相同级别的XML元素融入到阵列

<customer> 
    ... 
    <dob>1990-10-01</dob> 
    <address1>555 Hollywood Blvd</address1> 
    <city>Hollywood</city> 
    <state>CA</state> 
    <zipCode>99999</zipCode> 
    <alternateAddress1>575 Hollywood St</alternateAddress1> 
    <alternateCity>Los Angeles</alternateCity> 
    <alternateState>CA</alternateState> 
    <alternateZipCode>12345</alternateZipCode> 
    .... 
</customer> 

我企图在一个结构:

type Test struct { 
     CustProfile struct { 
     DOB string `xml:"birthDate" json:"dob"` 
     Address []struct { 
      PrimaryAddress struct { 
       Street string `xml:"address1" json:"line1"` 
       City string `xml:"city" json:"city"` 
       State string `xml:"state" json:"state"` 
       ZipCode string `xml:"zipCode" json:"zip"` 
       IsPrimaryAddress string `json:"isPrimaryAddress"` 
      } 
      AlternateAddress struct { 
       Street string `xml:"alternateAddress1" json:"line1"` 
       City string `xml:"alternateCity" json:"city"` 
       State string `xml:"alternateState" json:"state"` 
       ZipCode string `xml:"alternateZipCode" json:"zip"` 
       IsPrimaryAddress string `json:"isPrimaryAddress"` 
      } 
     } `json:"address"` 
    } `xml:"customer" json:"custProfile"` 
    } 

所以我在这里遇到了一些问题。第一个问题是,所有的元素都在同一级别,从我目前的想法来看,因为CustProfile结构已经与父元素相关联,所以我不能引用Address中的任何子元素结构,因为路径将是客户 - >?>城市,州,等它将始终返回null,因为该路径不存在。

第二个问题是我试图为IsPrimaryAddress定义默认字符串的方式。我尝试做这样的事情,但我得到一个未定义的错误。

var marshalTest Test 
... 
marshalTest.CustProfile.Address.PrimaryAddress.IsPrimaryAddress = "Y"; 
marshalTest.CustProfile.Address.AlternateAddress.IsPrimaryAddress = "N"; 

是否有可能解开这个XML到一个结构,导致下面的结构?

{ 
    "custProfile": { 
    "dob": "1990-10-01", 
    "address": [ 
     { 
     "line1": "555 Hollywood Blvd", 
     "city": "HOLLYWOOD", 
     "state": "CA", 
     "zip": "99999", 
     "isPrimaryAddress": "Y" 
     }, 
     { 
     "line1": "575 Hollywood St", 
     "city": "LOS ANGELES", 
     "state": "CA", 
     "zip": "12345", 
     "isPrimaryAddress": "N" 
     } 
    ] 
} 

我不是在所有熟悉围棋XML编码和我已经能够管理最好是这样的:

{ 
     "custProfile": { 
     "dob": "1990-10-01", 
     "address": null 
     } 
} 

任何帮助将不胜感激。谢谢

+1

在你的示例代码中,'Test.CustProfile.Address'是一个切片,这就是为什么你得到一个未定义的错误,试图读取'marshalTest.CustProfile.Address.PrimaryAddress' - 你必须指定一个元素切片进行操作。在你的示例中,切片的每个元素都有一个'PrimaryAddress'和'SecondaryAddress',我不认为这是你想要做的。但是,我不知道任何方式直接使用'xml.Unmarshal'来描述你所描述的内容。你必须做一些操作才能到达那里。 – Adrian

+0

嗨@Adrian,你指的是什么类型的操作?我对Go非常陌生,所以我不知道可以做什么的程度。谢谢 – xPeaWhyTee

+0

将它解组为相同类型的两个成员,然后在解组后将其添加到该类型的一个片段。 – Adrian

回答

0

我能够结合xml解析与Xquery和json解析与Gabs手动构建我想要的结构。可能不是最干净的解决方案,但它允许我定制结构到我想要的程度。

相关问题