最近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&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>"
相关推荐
在Erlang环境中,`erlsom` 主要用于解析XML数据,并将其转换为Erlang的数据结构,方便进一步的处理和分析。这个库特别适用于需要处理大量XML数据的场景,如Web服务、数据交换或XML格式的配置文件。 **XML与Erlang的...
之后,就可以通过Erlang模块导入Exomler的功能,编写代码来解析XML数据。 总结起来,Exomler是一个专为Erlang设计的高性能XML解析器,它优化了内存使用和解析速度,适用于处理大量的XML数据。通过"exomler-master...
`fast_xml`使用NIFs来封装Fast Expat,实现高效地在Erlang中解析XML。 **fast_xml库的核心功能** 1. **解析XML文档**:`fast_xml`提供了一个简单的API,允许开发者读取XML文档,并在遇到每个元素、属性和文本节点...
exml是一个Erlang库,有助于解析XML流和进行一些基本的XML结构操作。 建造 exml是与钢筋兼容的OTP应用程序,请运行make或./rebar compile以进行构建。 根据要求,需要expat库的开发标头。 使用 exml可以一次解析...
- **XML解析**:erlxml能够解析XML字符串或二进制数据,转化为Erlang的数据结构,如XML元素、属性、文本等。 - **XML序列化**:反之,erlxml也能将Erlang的数据结构转换成XML格式的字符串或二进制数据。 - **XML流...
2. **应用程序模块(appmod)**:appmod允许你编写独立的Erlang模块来控制URI的解析和处理。这些模块定义了`out/1`函数,接收Yaws arg记录作为参数,从中获取请求详细信息。通过配置Yaws,可以将特定的URI路径映射到...
- **公共API工具**:如XML和JSON解析器,日期和时间处理,以及其他通用功能。 **5. PR.template** `PR.template`可能是Pull Request模板,用于贡献者向开源项目提交更改的指导。 **6. COPYRIGHT** `COPYRIGHT`文件...
2. JSON或XML数据格式:为了与Erlang服务器进行数据交换,客户端可能使用JSON或XML作为数据序列化格式,这两种格式跨语言兼容性好,易于解析和生成。 3. 多线程:Java客户端可能采用多线程技术,一个线程用于接收...
该方法与 , 或非常相似:将XML元素转换为内部语言结构(在我们的情况下为Erlang记录),该过程称为“解码”。 在解码期间,还会执行验证,因此会生成类型良好的结构,从而可能减少与手工解析有关的错误。 反向过程...
1. **性能提升**:`erl_protobuffs`经过优化,相比其他Erlang的protobuf实现,如`protobuf-erl`或`thrift`,其解析和编码速度更快。这得益于Erlang自身的并发特性和轻量级进程,以及`erl_protobuffs`内部的高效算法...
`yaccety_sax` 提供了对XML的解析能力,允许开发者在Erlang或Elixir程序中处理XML文档,提取所需信息,或者转换XML格式。Erlang和Elixir都是并发和分布式计算的强大工具,因此`yaccety_sax` 在处理大量并发XML解析...
映射组常用于表示键值解析树,如XML或配置文件,并且当使用JSON来通信时。映射组的语法是`#{key1 => value1, key2 => value2, ..., keyN => valueN}`。其中,`#`是映射组的标识符,键和值之间使用`=>`或`:=`来区分。...
Erlang程序可以通过解析这些XML文件,在运行时动态地加载和控制UI。 Erlang是一种并发和分布式计算的强项语言,以其容错性和高可用性闻名。结合GTK,Erlang程序员可以创建出既高效又可靠的图形应用程序。Erlang的轻...
XML 解析器允许开发者通过 XPath 来查找和提取 XML 数据。XPath 使用路径表达式来选取 XML 文档中的节点,比如选取所有 `<item>` 元素,或者选取具有特定属性的元素。 4. **XPath 选择器**:XPath 是一种在 XML ...
`gleam_combiner`是一个实验性的Erlang解析器组合器,它为开发人员提供了一种构建解析器的新方法。利用Erlang的强大功能和Parsec的思想,`gleam_combiner`可以帮助你构建高效、易于理解和维护的解析逻辑。通过运行...
2. **lib**:包含各种Erlang标准库,如加密、HTTP服务器、XML解析、数据库接口等。 3. **kernel**:基础操作系统接口,提供进程管理、文件系统访问、网络通信等功能。 4. **stdlib**:Erlang的标准库,提供了大量...
这可能包括更快的XML解析和更丰富的XML处理功能,对于需要处理XML数据的应用程序来说,这是一个重要的进步。 8. Unicode支持:通过EEP-10文档,Erlang引入了对Unicode的支持。这是国际化和本地化应用开发中的一个...
"EWSD Regenfile XML Transformer" 是一个专用于处理西门子EWSD(Erlang-based Wideband Switching Distributor)公共交换电话网络交换机配置的工具。"Regenfile"是EWSD系统中用来存储配置信息的特定格式文件,而...
检查依赖项,确保系统已经安装了必要的编译工具,如GCC、Make、Curl、XML解析器等,以及Unix工具链。此外,Erlang编译可能还需要如Autoconf、Automake和Libtool等额外的构建工具。 3. **配置编译**: 运行`./...
安装Erlang OTP源码版首先需要确保你的系统满足必要的依赖条件,通常包括C编译器、GNU Make、XML解析器等。在Linux环境下,可以通过包管理器如`apt-get`或`yum`来安装这些依赖。例如,在Ubuntu上,你可以执行以下...