I am trying to marshal an erlang record to a xml document. In my code
the record field name becomes the element name.
Is this a reasonable way to produce the Xml.
I was hoping to be able to "iterate" over the field names (with a list
comprehension perhaps) but I could not
find a way to convert a record to a List in the form
list( {fieldname1, value1}, {fieldname2, value2}).
My attempts follow:
-module(eway_xml).
-compile(export_all).
-import(xmerl).
-record(ewayRequest, {
ewayCustomerID, %required
ewayCustomerFirstName, %required
ewayCustomerLastName, %required
ewayOption1 %optional
}).
asXml(EwayRecord) ->
SimpleContent = asSimpleContent(EwayRecord),
lists:flatten(xmerl:export_simple_content(SimpleContent, xmerl_xml)).
asSimpleContent(EwayRequest) ->
[{ewaygateway,
[{ewayCustomerID, [EwayRequest#ewayRequest.ewayCustomerID]},
{ewayCustomerFirstName ,
[EwayRequest#ewayRequest.ewayCustomerFirstName ]},
{ewayCustomerLastName, [EwayRequest#ewayRequest.ewayCustomerLastName]},
{ewayOption1, [EwayRequest#ewayRequest.ewayOption1]}
]
}].
testRecord() ->
#ewayRequest{
ewayCustomerID = "87654321",
ewayCustomerFirstName = "Jackie",
ewayCustomerLastName = "Chan"
}.
Running form the command line produces the xml
12> eway_xml:asXml(eway_xml:testRecord()).
"<ewaygateway><ewayCustomerID>87654321</ewayCustomerID><ewayCustomerFirstName>Jackie</ewayCustomerFirstName><ewayCustomerLastName>Chan</ewayCustomerLastName><ewayOption1><undefined/></ewayOption1></ewaygateway>"