2016-03-28 19 views
1

Alfred 2 uygulaması için XML oluşturmaya çalışıyorum. Böyle tür görünüyor:XML'de marshalling yapıldığında isteğe bağlı "ihmal"?

<items> 
    <item autocomplete="My Thing"> 
     <title>My Thing</title> 
    </item> 
    <item> 
     <title>My Other Thing</title> 
    </item> 
    <item autocomplete=""> 
     <title>My Third Thing</title> 
    </item> 
</items> 

karşılaştığım belirli zorluk item üzerinde autocomplete nitelik boş bir dizeye ayarlanırsa daha eksikse Alfred farklı davranır olmasıdır.

Sonuç olarak, her iki olanaklarını teklif edebilmek istiyorum: varsayılan (omitempty) tarafından niteliğini ihmal, ancak boş bir dize (değilomitempty) olarak ayarlanmalıdır zorlamak imkanı sunuyoruz.

Bunu yapmak için nasıl giderim?

cevap

1

İşaretçiyi marshal yapacağınız yapıda kullanabilirsiniz. İşaretçinin nil olması durumunda, alan atlanacaktır. Bir dizgiye işaret etmesi durumunda (dizgi boş olsa bile) işlenecektir. cevap için

Play

type Address struct { 
    City *string 
} 

city1 := "NYC" 
city2 := "" 
address1 := Address{&city1} 
address2 := Address{&city2} 
address3 := Address{nil} 

enc := xml.NewEncoder(os.Stdout) 

enc.Encode(address1) // <Address><City>NYC</City></Address> 
enc.Encode(address2) // <Address><City></City></Address> 
enc.Encode(address3) // <Address></Address> 
+0

teşekkürler. Bunu yapmaktan kaçınmayı umuyordum, çünkü hemen hemen her değer bir dizgedir, bu yüzden API, iplere işaret eden bir itici karmaşa olacaktır. Sanırım XML'i "elle" üretmek zorunda kalacağım. – wbg