我使用xmerl_sax_parser:file()解析一個非常大的文件,並在中途得到一個異常。Erlang xmerl_sax_parser引發錯誤
exception throw: {'EXIT',{undef,[{xmerl_sax_parser_utf8,cf,
[<<"Ä">>,
{xmerl_sax_parser_state}]}]}}
我已經看了看數據,它不不包含任何奇怪的字符,如果它做了我該怎麼處理它。文檔沒有告訴我任何東西。
下面是代碼的樣子:
run(FileName) ->
{ok, Xml, _Rest} =
xmerl_sax_parser:file(FileName, [{event_fun, fun event/3},
{event_state, {[], ""}},
{encoding, utf8},
{file_type, normal},
skip_external_dtd]),
Xml.
event(_Ev = {startElement, _, "product", _, _}, _Loc, _State = {Xml, _}) ->
{[[]|Xml], ""};
event(_Event = {characters, Chars}, _Location, _State = {Quotes, _}) ->
{Quotes, Chars};
event(_Ev = {endElement,_,"stock",_},_L,_State = {[Data|Rest],Chars}) ->
Element = list_to_atom("name"),
Updated = [{Element, Chars}|Data],
{[Updated|Rest], undefined};
event(_Ev = {endElement,_,"date",_},_L,_State = {[Data|Rest],Chars}) ->
Element = list_to_atom("brand"),
Updated = [{Element, Chars}|Data],
{[Updated|Rest], undefined};
event(_Ev = {endElement,_,"open",_},_L,_State = {[Data|Rest],Chars}) ->
Element = list_to_atom("price"),
Updated = [{Element, Chars}|Data],
{[Updated|Rest], undefined};
event(_Ev = {endElement,_,"low",_},_L,_State = {[Data|Rest],Chars}) ->
Element = list_to_atom("url"),
Updated = [{Element, Chars}|Data],
{[Updated|Rest], undefined};
event(_Ev = {endElement,_,"stats",_},_L,_State = {[Data|Rest],Chars}) ->
Element = list_to_atom("category"),
Updated = [{Element, Chars}|Data],
{[Updated|Rest], undefined};
event(_Event, _Location, State) ->
State.
如何修復或妥善處理有什麼想法?
這很奇怪;有人試圖調用'xmerl_sax_parser_utf8:cf/2',但我的版本只有'cf/3','cf/4'和'cf/5' ......這是哪個Erlang版本? – legoscia