xmerl_sax_parser:file() を使用してかなり大きなファイルを解析していますが、途中で例外が発生します。
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.
適切に修正または処理する方法について何か考えはありますか?