Cómo decodificar ASN.1 a XML con Erlang
Pregunta
Yo uso módulo asn1 en Erlang a decodificar. La salida es como
{'UL-CCCH-Message',asn1_NOVALUE,
{rrcConnectionRequest,
{'RRCConnectionRequest',
{'tmsi-and-LAI',
{'TMSI-and-LAI-GSM-MAP',
[1,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,0,1,0,1,1,
1,1,0,1,0],
{'LAI',
{'PLMN-Identity',[2,2,6],[0,1]},
[0,1,1,1,1,0,0,1,1,0,0,0,1,1,0,1]}}},
terminatingBackgroundCall,noError,
{'MeasuredResultsOnRACH',
{'MeasuredResultsOnRACH_currentCell',
{fdd,
{'MeasuredResultsOnRACH_currentCell_modeSpecificInfo_fdd',
{'cpich-Ec-N0',39}}}},
asn1_NOVALUE},
asn1_NOVALUE}}}
¿Cómo puedo XML de salida en lugar de término Erlang?
Solución
Keep in mind that any erlang term (not specific to the asn.1 module) could be output as XML easily by a function like this:
to_xml(X) when is_atom(X) ->
"<atom>" ++ atom_to_list(X) ++ "</atom>"; % might want apostrophes
to_xml(X) when is_integer(X) ->
"<integer>" ++ io_lib:format("~p", [X]) ++ "</integer>";
to_xml(X) when is_tuple(X) ->
"<tuple size=" ++ tuple_size(X) ++ ">" ++ % or maybe want size implicit
lists:foldr(fun(E, L) -> to_xml(E) ++ L end, [], tuple_to_list(X))
++ "</tuple>";
to_xml(X) when is_list(X) ->
"<list>" ++ lists:foldr(fun(E, L) -> to_xml(E) ++ L end, [], X) ++ "</list>";
% etc...
Otros consejos
Perhaps two available option for you for converting ASN1 to XML representation:
http://www.research.ibm.com/trl/projects/xml/xss4j/docs/axt-readme.html
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow