1

整形式ではない可能性のある XML ファイルを受信しました。この場合、それらを無視する必要があります。

xmerlをラップするSweetXmlを使用しています。

2 つの属性の間にスペースがない不適切な形式の XML の例があります。

is_well_formed 関数はありません - 単純なブール値の応答を持つものは素晴らしいでしょう。

Xmerl はファイルを解析しようとしますが、それが気に入らないため、終了を送信します。

スーパーバイザーについてはまだ学んでいませんが、これはスーパーバイザーの場合のように思えます。

その終了信号を処理する新人または簡単な方法はありますか?

defmodule XmlIsWellFormed.WellFormed do
  def is_well_formed(xml) do
    import SweetXml
    xml_string = to_string xml
    result = xml_string |> parse # parse sends exit.

    # FYI - SweetXml.parse :
    # def parse(doc) do
    #     {parsed_doc, _} = :xmerl_scan.string(doc)
    #     parsed_doc
    # end

    # Note:     inspecting result is no use because xmerl sends an exit with:
    #           "whitespace_required_between_attributes"

    # Something like this would be handy:
    # try do
    #     result = :xmerl_scan.string(xml)
    # rescue
    #     :exit, _ -> nil
    # end
  end
end

rubbish_xml = '<rubbishml><html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml"></rubbishml>'
XmlIsWellFormed.WellFormed.is_well_formed rubbish_xml
4

1 に答える 1

5
于 2014-11-05T08:09:44.190 に答える