2012-06-10 90 views
1

我是Erlang的新手,正在嘗試將XML文檔解析爲記錄。我嘗試了各種方法(xmerl_scan/xpath),但是因爲我不知道從哪裏開始,所以被繪製到了一個角落。將XML解析爲Erlang記錄列表

我已經研究了三本關於這個主題的書,花了幾個小時在Google上搜索主題,但是我想我必須錯過一些明顯的東西。

There 必須是一種使用某種模式匹配訪問每個節點並生成匹配列表的簡單方法。

這是輸入...

<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來搜索特定節點中的特定信息,但在上面的例子中,我需要從多個節點中提取信息。

謝謝

+0

使用erlsom'SAX'解析器 –

回答

1

你看過erlsom了嗎?

它比IMO更容易使用。使用erlsom,您可以從XSD架構生成記錄定義。記錄定義映射模式中的類型(加上一些額外的信息)。有記錄模式匹配是直接使用。更多信息你可以找到here

+0

是的,我看着erlsom,但只是一個簡短的例子,它似乎不符合我正在尋找的東西,但是您發佈的doco鏈接只是表明我真的需要適當研究的東西!非常感謝,我正在路上! – unclejimbob