Как создать атрибут XML (вместо элемента), используя FSharp? - PullRequest
5 голосов
/ 11 ноября 2010

У меня есть требование для создания XML, который выглядит следующим образом:

<record id="100000000000000000" type="Message">  
    ...a bunch of xml ...
</record>  

Вместо этого, используя код FSsharp, который я использую, я получаю это:

<record>
    <type>Message</type>
    <id>118448</id>
    ...a bunch of xml....
</record>

вот что я сейчас делаю:

type record( id:int, sr:sender, recipients: recipient array, atts : attachment array, con : conversation, madeDate : creation) =  
    let mutable id: int = id
    let mutable typ = "Message"
    let mutable creation = madeDate
    let mutable sender  = sr
    let mutable recipients = recipients
    let mutable conversation = con
    let mutable attachments = atts

    public new() =
        record( -1, sender(-1,"Joe","Plumber","Joe@plumber.com"), Array.empty, Array.empty, conversation(), creation())    

    [<XmlElement("type")>] 
    member this.Type with get() = typ and set v = typ <- v

    [<XmlElementAttribute("id")>] 
    member this.Id with get() = id and set v = id <- v

    [<XmlElement("creation")>] 
    member this.Creation with get() = creation and set v = creation <- v

    [<XmlElement("sender")>]
    member this.Sender with get() = sender and set v = sender <- v

    [<XmlArrayAttribute("recipients")>]
    [<XmlArrayItem(typeof<recipient>, ElementName = "recipient")>]
    member this.Recipients with get() = recipients and set v = recipients <- v   

    [<XmlElement("conversation_info")>]
    member this.Conversation with get() = conversation and set v = conversation <- v

    [<XmlArrayAttribute("attachments")>]        
    [<XmlArrayItem(typeof<attachment>, ElementName = "attachment")>]
    member this.Attachments with get() = attachments and set v = attachments <- v

1 Ответ

6 голосов
/ 11 ноября 2010

Я думаю, вы хотите XmlAttributeAttribute вместо XmlElementAttribute.

Обратите внимание, что

[<XmlElement>]

и

[<XmlElementAttribute>]

это одно и то же (так же, какC #).

...