用xmerl解析xml

Mar*_*var 4 xml elixir

我正在尝试解析像这样的xml结构

<result>
  <event>
    <title>My event</name>
    <artist>
      <name>Michael Jackson</name>
    </artist>
  </event>
  <event>
    <title>My event 2</name>
    <artist>
      <name>Rolling Stones</name>
    </artist>
  </event>
<result>
Run Code Online (Sandbox Code Playgroud)

所以我想遍历事件,最后得到一个带有相应结果的Elixir地图.它需要与名称无关,因为事件中的字段不同.

期望的结果

[{title: “My event”, artist: [{name: “Michael Jackson”}]}, {title: “My even 2t”, artist: [{name: “Rolling stones"}]}]
Run Code Online (Sandbox Code Playgroud)

所以这就是我到目前为止所得到的

defmodule Test do

  require Record
  require IEx
  Record.defrecord :xmlElement, Record.extract(:xmlElement, from_lib: "xmerl/include/xmerl.hrl")
  Record.defrecord :xmlText, Record.extract(:xmlText, from_lib: "xmerl/include/xmerl.hrl")

  def run do
    {root, _} = :xmerl_scan.file("test.xml")

    event_elements = :xmerl_xpath.string('//event', root)

    # Traverse each event.
    fields = Enum.map event_elements, fn(event) ->

      # Traverse each field.
      Enum.map event, fn(field) ->
        [xmlElement(field, :name), xmlText(field, :value)]
      end
    end
  end
end

Test.run
Run Code Online (Sandbox Code Playgroud)

我是Elixir的新手,我找不到xmerl的任何指南.我希望有人可以帮助我,请解释代码:-).

par*_*oty 10

我对xmerl不太熟悉,但以下是基于你的例子我的试用(它不完整和粗糙,但希望它有所帮助).

以下是我遇到的很好的资源,而我正在进行实验.