parsingxml-parsingerlang

How to parse a XML in Erlang?


I have this string with XML extract in a tuple list:

MessageResponse = [{"code",0},{"description","description"},{"respuestaServicioSoap",{{"executeWebServiceSolutionResult",{{"CEDULARUCSpecified", false},{"AUTORIZACION", "00000012431781"},{"AUTORIZACIONSpecified",true},{"RESULTADO","000"},{"CODIGO_RESULTADOSpecified",true},{"COD_PAGO","00000012431781"},{"COD_PAGOSpecified",true},{"COMISION",{{"string","0"}}},{"COMISIONSpecified", true},{"DIRECCIONSpecified", false},{"FECHA_COMPENSACIONSpecified", false},{"FECHA_TRANSACCION","20170116"},{"FECHA_TRANSACCIONSpecified",true},{"FECHORA_SW","20170116123951"},{"FECHORA_SWSpecified",true},{"HORA_TRANSACCION","123951"},{"HORA_TRANSACCIONSpecified",true},{"MENSAJE","TRANSACCION OK"},{"MENSAJESpecified",true},{"NOMBRESpecified",false},{"PRODUCTO","0010761005"},{"PRODUCTOSpecified",true},{"SECUENCIA_ADQ","2833"},{"SECUENCIA_ADQSpecified",true},{"SECUENCIA_SW","576167"},{"SECUENCIA_SWSpecified",true},{"TERMINAL","0696069603000001"},{"TERMINALSpecified",true},{"TYPE_TRNSpecified",false},{"VALOR_TOTAL", { {  "string",  "0" }}},{"VALOR_TOTALSpecified",true},{"XML_ADDSpecified",false},{"XML_DATASpecified",false},{"XML_FACT","<XML_FACT>\r\n  <DATOS_FACT>\r\n    <LINEA_1>REPRESENTACIONES ORMAN S.A.</LINEA_1>\r\n    <LINEA_2>RUC: 0987654321</LINEA_2>\r\n    <LINEA_3 />\r\n    <LINEA_4 />\r\n    <LINEA_5>FACTURA: 001-627-0000048745</LINEA_5>\r\n    <LINEA_6>CLAVE: </LINEA_6>\r\n    <LINEA_7>COMISION POR SERVICIO</LINEA_7>\r\n    <LINEA_8>RECAUDACION EEAAPP - CUENTA: 11223344</LINEA_8>\r\n    <LINEA_12>FACTURA: 001-627-0000048745 - CONSULTE SU DOCUMENTO EN WWW.LITO.COM/DOCUMENTOSELECTRONICOS</LINEA_12>\r\n    <MSGCOMP />\r\n    <MSGFACT />\r\n  </DATOS_FACT>\r\n</XML_FACT>"},{"XML_FACTSpecified",true},{"XML_REPLY_CONSULTASpecified",false},{"XML_REPLY_PAGOSSpecified",false}}},{"executeWebServiceSolutionResultSpecified", true}}},{"result", "ok"}]

and need to get the text in LINEA_5 tag.

How can this be done?


Solution

  • with this code:

    {Xml, _Rest} = xmerl_scan:string(XmlFactura).
    [#xmlText{value=Linea5}] = xmerl_xpath:string("//LINEA_5/text()", Xml).