博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Erlang的Xml解析
阅读量:2058 次
发布时间:2019-04-29

本文共 2878 字,大约阅读时间需要 9 分钟。

Erlang的Xml解析常用函数:
xmerl_scan库:
string(Text::list()) -> {xmlElement(), Rest}                           
Parse string containing an XML document,将字符串列表,解析成XML树

file(Filename::string()) -> {xmlElement(), Rest}        Parse file containing an XML document

xmerl_xpath库:
string(Str, Doc) -> [docEntity()] | Scalar  根据XPath,从已经解析好的XML树中提取出节点
基础练习:
[plain]
  1. 1> Xml="<?xml version='1.0' encoding='utf-8'?><root>123</root>".  
  2. "<?xml version='1.0' encoding='utf-8'?><root>123</root>"  
  3. 2> {Doc,_}=xmerl_scan:string(Xml).  
  4. {
    {xmlElement,root,root,[],  
  5.              {xmlNamespace,[],[]},  
  6.              [],1,[],  
  7.              [{xmlText,[{root,1}],1,[],"123",text}],  
  8.              [],"/mnt/hgfs/work/myErlangWork/myErlang1/src",undeclared},  
  9.  []}  
  10. 3> xmerl_xpath:string("/root",Doc).          
  11. [{xmlElement,root,root,[],  
  12.              {xmlNamespace,[],[]},  
  13.              [],1,[],  
  14.              [{xmlText,[{root,1}],1,[],"123",text}],  
  15.              [],"/mnt/hgfs/work/myErlangWork/myErlang1/src",undeclared}]  
  16. 4> xmerl_xpath:string("/root/text()",Doc).  
  17. [{xmlText,[{root,1}],1,[],"123",text}]  
举例:解析购物清单
shopping.xml
[plain]
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <shopping>  
  3.     <item name="bread" quantity="3" price="2.50">bread</item>  
  4.     <item name="milk" quantity="2" price="3.50">milk</item>  
  5. </shopping>  
xml_test.erl 
[plain]
  1. -module(xml_test).  
  2. -include_lib("xmerl/include/xmerl.hrl").  
  3. -export([  
  4.     test_xml/0,  
  5.     test_xml_file/0  
  6.         ]).  
  7.   
  8. %%读取xml列表为xmlElement,然后解析数据  
  9. test_xml() ->  
  10.     Xml = "<shopping>  
  11.                   <item name=\"bread\" quantity=\"3\" price=\"2.50\">bread</item>  
  12.                   <item name=\"milk\" quantity=\"2\" price=\"3.50\">milk</item>  
  13.                 </shopping>",  
  14.     {XmlDoc,_} = xmerl_scan:string(Xml),  
  15.     get_total(XmlDoc),  
  16.     get_item_text(XmlDoc).  
  17.   
  18. %%Parse file containing an XML document,然后解析数据  
  19. test_xml_file() ->  
  20.     {Doc,_} = xmerl_scan:file("shopping.xml",[{encoding,'utf-8'}]),  
  21.     get_total(Doc),  
  22.     get_item_text(Doc).  
  23.   
  24. %%计算得到购物清单的总金额  
  25. get_total(XmlDoc) ->  
  26.     Items = xmerl_xpath:string("/shopping/item",XmlDoc),  
  27.     TotalPrice = lists:foldl(fun(Item,Total)->  
  28.                                      [#xmlAttribute{value=PriceString}] = xmerl_xpath:string("/item/@price",Item),  
  29.                                      [#xmlAttribute{value=QuantityString}] = xmerl_xpath:string("/item/@quantity",Item),  
  30.                                      Price = list_to_float(PriceString),  
  31.                                      Quantity = list_to_integer(QuantityString),  
  32.                                      Total + Price * Quantity  
  33.                              end,  
  34.                              0,Items),  
  35.     io:format("Price of shopping is $~.2f~n",[TotalPrice]),  
  36.     TotalPrice.  
  37.   
  38. %%获取购物清单上所有商品内容的列表,取item节点的text  
  39. get_item_text(XmlDoc) ->  
  40.     Items = xmerl_xpath:string("/shopping/item",XmlDoc),  
  41.     ItemList = lists:foldl(fun(Item,Result)->  
  42.                                    [#xmlText{value=Value}] = xmerl_xpath:string("/item/text()",Item),  
  43.                                    io:format("item is ~p~n",[Value]),  
  44.                                    Result ++ [Value]        %% 结果是["bread","milk"]  
  45.                                    %% 此句如果改为Result ++ Value 结果就变成了"breadmilk"  
  46.                            end,  
  47.                            [],Items),  
  48.     io:format("ItemList is ~p~n",[ItemList]),  
  49.     ItemList.  
执行:
[plain]
  1. 1> c(xml_test).          
  2. {ok,xml_test}  
  3. 2> xml_test:test_xml().  
  4. Price of shopping is $14.50  
  5. item is "bread"  
  6. item is "milk"  
  7. ItemList is ["bread","milk"]  
  8. ["bread","milk"]  
  9. 3> xml_test:test_xml_file().  
  10. Price of shopping is $14.50  
  11. item is "bread"  
  12. item is "milk"  
  13. ItemList is ["bread","milk"]  
  14. ["bread","milk"] 

转载地址:http://rsxlf.baihongyu.com/

你可能感兴趣的文章
Java工程师成神之路
查看>>
如何在 Linux 上自动设置 JAVA_HOME 环境变量
查看>>
MSSQL复习笔记
查看>>
Spring基础知识汇总
查看>>
Chrome扩展插件
查看>>
log4j.xml 日志文件配置
查看>>
如何删除MySql服务
查看>>
BAT Java和Rti环境变量设置
查看>>
NodeJs npm install 国内镜像
查看>>
python3.5.2 mysql Exccel
查看>>
mysqlDump 导出多表,其中部分表有限制数据内容
查看>>
vi 替换方法
查看>>
BAT 相关
查看>>
ANT集成SVNANT访问SVN(Subversion)
查看>>
高可用架构-- MySQL主从复制的配置
查看>>
jvm调优-从eclipse开始
查看>>
构建微服务:Spring boot 入门篇
查看>>
jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
查看>>
Spring boot Myibatis
查看>>
spring boot(七):springboot+mybatis多数据源最简解决方案
查看>>