2016-11-17 43 views
-3

導軌和from_xml如何將xml轉換爲Elixir中的地圖?

xml = <<-XML 
    <?xml version="1.0" encoding="UTF-8"?> 
    <hash> 
     <foo type="integer">1</foo> 
     <bar type="integer">2</bar> 
    </hash> 
XML 

hash = Hash.from_xml(xml) 
# => {"hash"=>{"foo"=>1, "bar"=>2}} 

我竭力要找到如何在一個相當簡單的方式做到這一點在任何藥劑的例子延伸哈希。

喜歡的東西:

Map.from_xml(xml) 
# => %{"hash" => %{"foo" => 1, "bar" => 2}} 
+4

'from_xml'是一個片狀的有缺陷的嘗試,[永遠不能正常工作](http://apidock.com/rails/Hash/from_xml/class#1280-Looks-like-this-method-has-trouble-with-屬性 - ),因爲不能有一個同構映射xml⇒散列。爲什麼你會期望在Elixir中存在任何懦弱的東西?使用任何xml解析庫解析XML並使用生成的結構。 – mudasobwa

+0

你是對的,它不是同構的。但是在某些情況下,預期的xml不包含屬性,甚至有一個天真的地圖更容易處理,然後到達xpath。 – Homan

回答

0

嘗試使用​​。您可以使用xmap函數和xpath的基本用法從xml文檔返回映射。這是一個example

0

我看着sweet_xml,它有一些漂亮的信號用於提取特定的數據模式。我的問題是,它需要我的一個非常詳細的設置,以指定我需要得到的所有路徑。

我也看過Quinn,它將xml解析爲可以搜索的其他數據結構。與地圖相比,我發現中間數據結構有點奇怪。

另一個問題是這兩個庫都使用xmerl,它看起來像它從正在解析的xml中創建新的原子。

我決定從頭開始自己的癢作爲一個練習,看看我是否能創造我的第一個十六進制包: https://github.com/homanchou/elixir-xml-to-map

它使用erlsom二郎庫,它說,它使用字符串鍵,而不是在幕後,我認爲這更好。

鑑於對這個問題的迴應,甚至考慮使用這種天真的方法顯然是非常忌諱的,所以謹慎使用。自述文件詳述了缺點。