我想把XML字符串解析成erlang列表,然后解析成JSON。
输入示例:
<?xml version="1.0" encoding="UTF-8"?>
<!--some message here-->
<start>
<data>
<number id="333">test message</number>
<data>current date</data>
</data>
<mass>
<client>35</client>
<address>lattitude</address>
<code>3454343</code>
<foo tipo="casa">Some text message 2</foo>
<product>TEST</product>
</mass>
</start>
输出应为:
{
"start": {
"data": {
"number": {
"@id": "333",
"#text": "test message"
},
"data": "current date"
},
"mass": {
"client": "35",
"address": "lattitude",
"code": "3454343",
"foo": {
"@tipo": "casa",
"#text": "Some text message 2"
},
"product": "TEST"
}
}
}
我正在尝试使用erlsom:simple_form(Xml)。
得到:
{ok,{"start",[],
[{"data",[],
[{"number",[{"id","333"}],["test message"]},
{"data",[],["current date"]}]},
{"mass",[],
[{"client",[],["35"]},
{"address",[],["lattitude"]},
{"code",[],["3454343"]},
{"foo",[{"tipo","casa"}],["Some text message 2"]},
{"product",[],["TEST"]}]}]},
[]}
现在我想删除这些空属性。有没有简单的方法可以做到这一点?先谢谢你。
更新:使用Erlang, converting xml to tuples and lists的解决方案使其工作
但让
{"start",
[{"data",
[{"number","test message"},{"data","current date"}]},
{"mass",
[{"client","35"},
{"address","lattitude"},
{"code","3454343"},
{"foo","Some text message 2"},
{"product","TEST"}]}]}
没有[{"id","333"}]
和[{"tipo","casa"}]
列表。
2条答案
按热度按时间rwqw0loc1#
简单解析的输出是一个集合格式:
{Node, Attributes, Children}
,因此您可以编写一个简单的解析器,将该结构转换为嵌套的proplist。这样,您可以使用mochijson或jsx将proplist转换为JSON字符串。使用mochijson在shell中运行它:
b1uwtaje2#
我建议对JSON使用jiffy,对XML使用exml。jiffy和exml有本地代码,这意味着它们非常快。
克隆并编译它们。
在编译它们之前,您应该安装g++和libexpat-dev
范例:
在shell中: