将XML解析为Erlang记录列表

时间:2012-06-10 12:04:38

标签: erlang xml-parsing

我是Erlang的新手,正在尝试将XML文档解析为记录。我已经尝试了各种方法(xmerl_scan / xpath),但是画到了一个角落,因为我不知道知道从哪里开始。

我已经通过三本关于这个主题的书,并且花了几个小时来搜索主题,但我想我一定会错过一些明显的东西。

必须是一种使用某种模式匹配访问每个节点并生成匹配列表的简单方法。

这是输入......

<Sports>
<Sport> SportId="1" SportName="Cricket"> 
<League LeagueId="1" LeagueName="Test Match"> 
<Meeting MeetingId="1" MeetingName="Test Match"/> 
</League> 
<League LeagueId="2" LeagueName="One Day International"> 
<Meeting MeetingId="1" MeetingName="One Day International Match""/> 
<Meeting MeetingId="2" MeetingName="One Day International Series"/> 
</League>
<League LeagueId="3" LeagueName="T20 World Cup"> 
<Meeting MeetingId="1" MeetingName="T20 World Cup Futures"/> 
</League> 
</Sport> 
<Sport SportId="7" SportName="Golf"> 
<League LeagueId="1" LeagueName="PGA Tour"> 
<Meeting MeetingId="1" MeetingName="St Jude Classic"/> 
<Meeting MeetingId="2" MeetingName="US Open"/> 
</League> 
<League LeagueId="22" LeagueName="European Tour"> 
<Meeting MeetingId="100" MeetingName="Nordea Masters"/> 
<Meeting MeetingId="101" MeetingName="Nordea Masters Tournament HH"/> 
<Meeting MeetingId="102" MeetingName="Nordea Masters Top Aussie"/> 
<Meeting MeetingId="107" MeetingName="Nordea Masters Handicap"/> 
<Meeting MeetingId="110" MeetingName="Nordea Masters R1 3 Balls"/> 
</League> 
<League LeagueId="34" LeagueName="Ryder Cup"> 
<Meeting MeetingId="1" MeetingName="Ryder Cup 2012"/> 
</League> 
</Sport> 
</Sports> 

这是期望的输出......

[{SportId,SportName,LeagueId,LeagueName,MeetingId,MeetingName}] 

不一定需要一个固定的答案,但只是向正确的方向推进将是有用的,所以我可以自己做一些进一步的研究。

我已经使用mochiweb_html:parse来搜索特定节点中的特定信息,但在上面的例子中,我需要从多个节点中提取信息。

感谢

1 个答案:

答案 0 :(得分:1)

你有没看过erlsom

IMO比xmerl更容易使用。使用erlsom,您可以从XSD架构生成记录定义。记录定义映射模式中的类型(以及一些额外信息)。具有记录模式匹配是直接使用的。您可以找到更多信息here