这个是一个简单的 xml2js 使用示例

将后台返回的 xml 代码转换为前台可使用的 json 格式的字符串 github 源码地址

源码

  • app.js

    1. var fs = require('fs'),
    2. xml2js = require('xml2js')
    3. var parser = new xml2js.Parser({ explicitArray: false })
    4. fs.readFile(__dirname + '/data.xml', function(err, data) {
    5. parser.parseString(data, function(err, result) {
    6. console.log(err)
    7. console.log(result)
    8. fs.writeFile('data.json', JSON.stringify(result), err => {
    9. if (err) throw err
    10. console.log('文件已保存')
    11. })
    12. })
    13. })
  • data.xml

    1. <BillInfo xmlns="http://bill.xmlbeans.zhcx.asiainfo.com/">
    2. <ReturnCode>0</ReturnCode>
    3. <ReturnDetail>查询调用成功返回!</ReturnDetail>
    4. <SysId>1</SysId>
    5. <PpFlag>2</PpFlag>
    6. <BillType>25</BillType>
    7. <RegionId>71</RegionId>
    8. <BillCycle>201812</BillCycle>
    9. <PageNum>1</PageNum>
    10. <PageSize>1</PageSize>
    11. <PostAddr>下沙开发区海天城3-1-2401</PostAddr>
    12. <AcctCode>2711025709493</AcctCode>
    13. <Desc>TY3G</Desc>
    14. <FB>
    15. <BN>中国电信股份有限公司杭州分公司客户帐单</BN>
    16. <TL>
    17. <TI>
    18. <IN>帐户名称</IN>
    19. <IV>卢倩</IV>
    20. </TI>
    21. <TI>
    22. <IN>费用提示</IN>
    23. <IV>您本期费用已结清,无需另外付费。</IV>
    24. </TI>
    25. <TI>
    26. <IN>帐单周期</IN>
    27. <IV>2018年12月01日至2018年12月31日</IV>
    28. </TI>
    29. <TI>
    30. <IN>帐户号码</IN>
    31. <IV>2711025709493</IV>
    32. </TI>
    33. <TI>
    34. <IN>打印日期</IN>
    35. <IV>2019年01月15日</IV>
    36. </TI>
    37. </TL>
    38. <FEE>
    39. <FL>
    40. <FN/>
    41. <FU>手机:13336024342</FU>
    42. <FT>104.82</FT>
    43. <FI>
    44. <IT>
    45. <IN>月基本费</IN>
    46. <IV>99.00,0.00,99.00</IV>
    47. <IL>2</IL>
    48. <IB>1</IB>
    49. <IBM>0</IBM>
    50. <ITOP>0</ITOP>
    51. <IBUT>0</IBUT>
    52. </IT>
    53. <IT>
    54. <IN>基本包月费</IN>
    55. <IV>99.00,0.00,99.00</IV>
    56. <IL>3</IL>
    57. <IB>0</IB>
    58. <IBM>0</IBM>
    59. <ITOP>0</ITOP>
    60. <IBUT>0</IBUT>
    61. <ILK>{"key_num":"13336024342","flag":1,"serv_type":"5","item_id":"300146"}</ILK>
    62. </IT>
    63. <IT>
    64. <IN>上网及数据通信费</IN>
    65. <IV>5.82,0.00,5.82</IV>
    66. <IL>2</IL>
    67. <IB>1</IB>
    68. <IBM>0</IBM>
    69. <ITOP>0</ITOP>
    70. <IBUT>0</IBUT>
    71. </IT>
    72. <IT>
    73. <IN>WiFi使用费</IN>
    74. <IV>5.82,0.00,5.82</IV>
    75. <IL>3</IL>
    76. <IB>0</IB>
    77. <IBM>0</IBM>
    78. <ITOP>0</ITOP>
    79. <IBUT>0</IBUT>
    80. <ILK>{"key_num":"13336024342","flag":1,"serv_type":"5","item_id":"302482"}</ILK>
    81. </IT>
    82. <IT>
    83. <IN>综合信息服务费</IN>
    84. <IV>5.00,-5.00,0.00</IV>
    85. <IL>2</IL>
    86. <IB>1</IB>
    87. <IBM>0</IBM>
    88. <ITOP>0</ITOP>
    89. <IBUT>0</IBUT>
    90. </IT>
    91. <IT>
    92. <IN>来电显示功能费</IN>
    93. <IV>5.00,-5.00,0.00</IV>
    94. <IL>3</IL>
    95. <IB>0</IB>
    96. <IBM>0</IBM>
    97. <ITOP>0</ITOP>
    98. <IBUT>0</IBUT>
    99. <ILK>{"key_num":"13336024342","flag":1,"serv_type":"5","item_id":"200277"}</ILK>
    100. </IT>
    101. <IT>
    102. <IN>本项小计:</IN>
    103. <IV>109.82,-5.00,104.82</IV>
    104. <IL>1</IL>
    105. <IB>1</IB>
    106. <IBM>0</IBM>
    107. <ITOP>2</ITOP>
    108. <IBUT>0</IBUT>
    109. </IT>
    110. </FI>
    111. <FR>
    112. <IT>
    113. <IU/>
    114. <IN>(共享)国内通话分钟数</IN>
    115. <IC>300</IC>
    116. <IV>102</IV>
    117. <IF/>
    118. </IT>
    119. </FR>
    120. </FL>
    121. <FL>
    122. <FN/>
    123. <FU>手机:17705810431</FU>
    124. <FT>19.00</FT>
    125. <FI>
    126. <IT>
    127. <IN>综合信息服务费</IN>
    128. <IV>24.00,-5.00,19.00</IV>
    129. <IL>2</IL>
    130. <IB>1</IB>
    131. <IBM>0</IBM>
    132. <ITOP>0</ITOP>
    133. <IBUT>0</IBUT>
    134. </IT>
    135. <IT>
    136. <IN>来电显示功能费</IN>
    137. <IV>5.00,-5.00,0.00</IV>
    138. <IL>3</IL>
    139. <IB>0</IB>
    140. <IBM>0</IBM>
    141. <ITOP>0</ITOP>
    142. <IBUT>0</IBUT>
    143. <ILK>{"key_num":"17705810431","flag":1,"serv_type":"5","item_id":"200277"}</ILK>
    144. </IT>
    145. <IT>
    146. <IN>副卡功能费</IN>
    147. <IV>19.00,0.00,19.00</IV>
    148. <IL>3</IL>
    149. <IB>0</IB>
    150. <IBM>0</IBM>
    151. <ITOP>0</ITOP>
    152. <IBUT>0</IBUT>
    153. <ILK>{"key_num":"17705810431","flag":1,"serv_type":"5","item_id":"303163"}</ILK>
    154. </IT>
    155. <IT>
    156. <IN>本项小计:</IN>
    157. <IV>24.00,-5.00,19.00</IV>
    158. <IL>1</IL>
    159. <IB>1</IB>
    160. <IBM>0</IBM>
    161. <ITOP>2</ITOP>
    162. <IBUT>0</IBUT>
    163. </IT>
    164. </FI>
    165. <FR>
    166. <IT>
    167. <IU/>
    168. <IN>(共享)国内通话分钟数</IN>
    169. <IC>300</IC>
    170. <IV>184</IV>
    171. <IF/>
    172. </IT>
    173. </FR>
    174. </FL>
    175. </FEE>
    176. <OIL>
    177. <II>
    178. <IN>帐户信息</IN>
    179. <IL>
    180. <IT>
    181. <NM>本期费用合计:</NM>
    182. <VL>123.82元</VL>
    183. </IT>
    184. <IT>
    185. <NM>本期已付费用:</NM>
    186. <VL>123.82元(其中赠款抵扣5.00元,本金抵扣118.82元)</VL>
    187. </IT>
    188. <IT>
    189. <NM>本期未交费用:</NM>
    190. <VL>0.00元</VL>
    191. </IT>
    192. <IT>
    193. <NM>截至期末帐户可用余额:</NM>
    194. <VL>46.01元</VL>
    195. </IT>
    196. <IT>
    197. <NM/>
    198. <VL/>
    199. </IT>
    200. <IT>
    201. <NM>备注:</NM>
    202. <VL>1.帐单支付请登陆网上营业厅(zj.189.cn)或翼支付网站(www.bestpay.com.cn)使用充值卡或银行卡进行充值交费。2.流量单位换算关系: 1MB=1024KB。3.自2016年7月起,电信企业用户费用欠交信息将逐步纳入人民银行征信中心浙江省分中心“浙江省企业信用信息辅助系统”。</VL>
    203. </IT>
    204. </IL>
    205. </II>
    206. <II>
    207. <IN>积分信息</IN>
    208. <IL>
    209. <IT>
    210. <NM>本期末可用积分=上期末可用积分-当期使用积分+本期新增可用积分</NM>
    211. <VL/>
    212. </IT>
    213. <IT>
    214. <NM><![CDATA[8410&nbsp;&nbsp;&nbsp;&nbsp; = &nbsp;&nbsp;&nbsp;&nbsp;10047&nbsp;&nbsp;&nbsp;&nbsp; - &nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp; + &nbsp;&nbsp;&nbsp;&nbsp;226]]></NM>
    215. <VL/>
    216. </IT>
    217. <IT>
    218. <NM>备注:年末到期积分为4398,请您及时兑换。积分兑换请登陆网上营业厅或天翼积分商城(jf.189.cn)&lt; br>
    219. 温馨提醒:每月5日为积分出账日!</NM>
    220. <VL/>
    221. </IT>
    222. </IL>
    223. </II>
    224. <II>
    225. <IN>套餐说明</IN>
    226. <IL/>
    227. </II>
    228. </OIL>
    229. </FB>
    230. </BillInfo>

    文件说明

  • app.js -> 主要的启动代码

  • data.json -> 读取 xml 文件后,输出的 json 数据
  • data.xml -> 需要读取的 xml 文件

    装包

    1. yarn

    启动应用

    1. node app.js