`
dws_202
  • 浏览: 9838 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Erlang解析xml

阅读更多

最近Erlang项目中有用到xml处理,简单研究了,主要查找erlang库中xmerl的初学文档(lib/xmerl-1.2.8/doc/html/xmerl_ug.html)。

并参考坚强2002的博客:http://www.cnblogs.com/me-sa/archive/2012/07/20/erlang_xml.html

废话不多说,上代码:

直接用官方给出的xml示例来处理(motorcycles.xml):

 

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE motorcycles SYSTEM "motorcycles.dtd">
<motorcycles>
  <bike year="2000" color="black">
    <name>
      <manufacturer>Suzuki</manufacturer>
      <brandName>Suzuki VL 1500</brandName>
      <additionalName>Intruder</additionalName>
    </name>
    <engine>V-engine, 2-cylinders, 1500 cc</engine>
    <kind>custom</kind>
    <drive>cardan</drive>
    <accessories>Sissy bar, luggage carrier,V&amp;H exhaust pipes</accessories>
  </bike>
  <date>2004.08.25</date>
  <bike year="1983" color="read pearl">
    <name>
      <manufacturer>Yamaha</manufacturer>
      <brandName>XJ 400</brandName>
    </name>
    <engine>4 cylinder, 400 cc</engine>
    <kind>alround</kind>
    <drive>chain</drive>
    <comment>Good shape!</comment>
  </bike>
</motorcycles>

如果xmerl_scan:file("motorcycles.xml"),报错,则请删除xml文件中DTD声明或者使用

xmerl_scan:file("motorcycles.xml", [{validation,false}]),

 

%% 取xml中bike属性year
get_attr_val() ->
 {Result, _Rest} = xmerl_scan:file("motorcycles.xml"),
 Years = xmerl_xpath:string("bike/@year", Result),
 io:format("Format=====Years=====~p~n", [Years]),
 lists:foldl(fun(K, Acc) ->
     #xmlAttribute{value=Val} = K,
     [{"year", Val}|Acc] end, [], Years).

执行结果:[{"year","1983"},{"year","2000"}]

     
%% 取xml中date值
get_xml_date() ->
 {Result, _Rest} = xmerl_scan:file("motorcycles.xml"),
 Date = xmerl_xpath:string("date", Result),
 [#xmlElement{content = Content}] = Date,
 [#xmlText{value = Val}] = Content,
 {"date", Val}.

执行结果:{"date","2004.08.25"}
 
%% 取xml中name节点下manufacturer的值
get_xml_names() ->
 {Result, _Rest} = xmerl_scan:file("motorcycles.xml"),
 Bikes = xmerl_xpath:string("bike", Result),
 NameVals = lists:foldl(fun(K, Acc) ->
     Name = xmerl_xpath:string("name/manufacturer", K),
     [#xmlElement{content = [#xmlText{value = Val}]}] = Name,
     [{"manufacturer", Val}|Acc] end, [], Bikes),
 lists:reverse(NameVals).
 
执行结果:[{"manufacturer","Suzuki"},{"manufacturer","Yamaha"}]

%% 转换xml
gen_xml_list() ->
 XmlData = {bike, [{year,"2003"},{color,"black"},{condition,"new"}],
          [{name, [{manufacturer,["Harley Davidsson"]},
                 {brandName,["XL1200C"]},
                 {additionalName,["Sportster"]}]},
           {engine, ["V-engine, 2-cylinders, 1200 cc"]},
           {kind,["custom"]},
           {drive,["belt"]}]},
 XmlLists = xmerl:export_simple([XmlData],xmerl_xml),
 lists:flatten(XmlLists).
 
执行结果:"<?xml version=\"1.0\"?><bike year=\"2003\" color=\"black\" condition=\"new\">
<name><manufacturer>Harley Davidsson</manufacturer><brandName>XL1200C</brandName>
<additionalName>Sportster</additionalName></name><engine>V-engine, 2-cylinders, 1200 cc</engine>
<kind>custom</kind><drive>belt</drive></bike>"

 

 

分享到:
评论

相关推荐

    erlsom:用于Erlang的XML解析器

    在Erlang环境中,`erlsom` 主要用于解析XML数据,并将其转换为Erlang的数据结构,方便进一步的处理和分析。这个库特别适用于需要处理大量XML数据的场景,如Web服务、数据交换或XML格式的配置文件。 **XML与Erlang的...

    exomler:用于Erlang的快速XML解析器

    之后,就可以通过Erlang模块导入Exomler的功能,编写代码来解析XML数据。 总结起来,Exomler是一个专为Erlang设计的高性能XML解析器,它优化了内存使用和解析速度,适用于处理大量的XML数据。通过"exomler-master...

    fast_xml:基于Fast Expat的Erlang XML解析库

    `fast_xml`使用NIFs来封装Fast Expat,实现高效地在Erlang中解析XML。 **fast_xml库的核心功能** 1. **解析XML文档**:`fast_xml`提供了一个简单的API,允许开发者读取XML文档,并在遇到每个元素、属性和文本节点...

    exml:Erlang中的XML解析库

    exml是一个Erlang库,有助于解析XML流和进行一些基本的XML结构操作。 建造 exml是与钢筋兼容的OTP应用程序,请运行make或./rebar compile以进行构建。 根据要求,需要expat库的开发标头。 使用 exml可以一次解析...

    erlxml:erlxml-基于pugixml的Erlang XML解析库

    - **XML解析**:erlxml能够解析XML字符串或二进制数据,转化为Erlang的数据结构,如XML元素、属性、文本等。 - **XML序列化**:反之,erlxml也能将Erlang的数据结构转换成XML格式的字符串或二进制数据。 - **XML流...

    使用Erlang和Yaws开发REST式的服务

    2. **应用程序模块(appmod)**:appmod允许你编写独立的Erlang模块来控制URI的解析和处理。这些模块定义了`out/1`函数,接收Yaws arg记录作为参数,从中获取请求详细信息。通过配置Yaws,可以将特定的URI路径映射到...

    erlang otp 19.1 官网文档 HTML格式

    - **公共API工具**:如XML和JSON解析器,日期和时间处理,以及其他通用功能。 **5. PR.template** `PR.template`可能是Pull Request模板,用于贡献者向开源项目提交更改的指导。 **6. COPYRIGHT** `COPYRIGHT`文件...

    一个我自己学习Erlang的聊天室服务器及客户端代码

    2. JSON或XML数据格式:为了与Erlang服务器进行数据交换,客户端可能使用JSON或XML作为数据序列化格式,这两种格式跨语言兼容性好,易于解析和生成。 3. 多线程:Java客户端可能采用多线程技术,一个线程用于接收...

    xmpp:快速XML之上的ErlangElixir XMPP解析和序列化库

    该方法与 , 或非常相似:将XML元素转换为内部语言结构(在我们的情况下为Erlang记录),该过程称为“解码”。 在解码期间,还会执行验证,因此会生成类型良好的结构,从而可能减少与手工解析有关的错误。 反向过程...

    erlang版本的protobuf(erl_protobuffs)

    1. **性能提升**:`erl_protobuffs`经过优化,相比其他Erlang的protobuf实现,如`protobuf-erl`或`thrift`,其解析和编码速度更快。这得益于Erlang自身的并发特性和轻量级进程,以及`erl_protobuffs`内部的高效算法...

    yaccety_sax:BEAM语言的快速,选择性XML拉式解析器

    `yaccety_sax` 提供了对XML的解析能力,允许开发者在Erlang或Elixir程序中处理XML文档,提取所需信息,或者转换XML格式。Erlang和Elixir都是并发和分布式计算的强大工具,因此`yaccety_sax` 在处理大量并发XML解析...

    Erlang中的基本元素操作小结

    映射组常用于表示键值解析树,如XML或配置文件,并且当使用JSON来通信时。映射组的语法是`#{key1 =&gt; value1, key2 =&gt; value2, ..., keyN =&gt; valueN}`。其中,`#`是映射组的标识符,键和值之间使用`=&gt;`或`:=`来区分。...

    Erlang/Gtk-开源

    Erlang程序可以通过解析这些XML文件,在运行时动态地加载和控制UI。 Erlang是一种并发和分布式计算的强项语言,以其容错性和高可用性闻名。结合GTK,Erlang程序员可以创建出既高效又可靠的图形应用程序。Erlang的轻...

    meeseeks:一个Elixir库,用于使用CSS或XPath选择器从HTML和XML解析和提取数据

    XML 解析器允许开发者通过 XPath 来查找和提取 XML 数据。XPath 使用路径表达式来选取 XML 文档中的节点,比如选取所有 `&lt;item&gt;` 元素,或者选取具有特定属性的元素。 4. **XPath 选择器**:XPath 是一种在 XML ...

    gleam_combiner:实验解析器组合器

    `gleam_combiner`是一个实验性的Erlang解析器组合器,它为开发人员提供了一种构建解析器的新方法。利用Erlang的强大功能和Parsec的思想,`gleam_combiner`可以帮助你构建高效、易于理解和维护的解析逻辑。通过运行...

    otp_src_25.0.3.tar.gz

    2. **lib**:包含各种Erlang标准库,如加密、HTTP服务器、XML解析、数据库接口等。 3. **kernel**:基础操作系统接口,提供进程管理、文件系统访问、网络通信等功能。 4. **stdlib**:Erlang的标准库,提供了大量...

    Tentative new functions in R13B

    这可能包括更快的XML解析和更丰富的XML处理功能,对于需要处理XML数据的应用程序来说,这是一个重要的进步。 8. Unicode支持:通过EEP-10文档,Erlang引入了对Unicode的支持。这是国际化和本地化应用开发中的一个...

    EWSD Regenfile XML Transformer-开源

    "EWSD Regenfile XML Transformer" 是一个专用于处理西门子EWSD(Erlang-based Wideband Switching Distributor)公共交换电话网络交换机配置的工具。"Regenfile"是EWSD系统中用来存储配置信息的特定格式文件,而...

    otp_src_21.0(1).tar.gz

    检查依赖项,确保系统已经安装了必要的编译工具,如GCC、Make、Curl、XML解析器等,以及Unix工具链。此外,Erlang编译可能还需要如Autoconf、Automake和Libtool等额外的构建工具。 3. **配置编译**: 运行`./...

    otp_src_21.2.tar.gz

    安装Erlang OTP源码版首先需要确保你的系统满足必要的依赖条件,通常包括C编译器、GNU Make、XML解析器等。在Linux环境下,可以通过包管理器如`apt-get`或`yum`来安装这些依赖。例如,在Ubuntu上,你可以执行以下...

Global site tag (gtag.js) - Google Analytics