从XML名称值转换成简单的哈希(converting from xml name-values in

2019-06-25 16:00发布

我不知道这正好什么名字由那是我的搜索复杂。

我的数据文件OX.session.xml是(旧?)形式

<?xml version="1.0" encoding="utf-8"?>
<CAppLogin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://oxbranch.optionsxpress.com">
  <SessionID>FE5E27A056944FBFBEF047F2B99E0BF6</SessionID>
  <AccountNum>8228-5500</AccountNum>
  <AccountID>967454</AccountID>
</CAppLogin>

究竟是什么被称为是XML数据格式?

不管怎样,我要的是在我的Ruby代码一个哈希像这样结束了:

CAppLogin = { :SessionID => "FE5E27A056944FBFBEF047F2B99E0BF6", :AccountNum => "8228-5500", etc. }   # Doesn't have to be called CAppLogin as in the file, may be fixed

什么可能是最短的,最内置Ruby的方式来自动哈希读,在某种程度上我可以更新的SessionID值并将其存储容易恢复成用于后面的程序运行的文件?

我打得四处YAML,REXML但宁愿没有打印我的(坏的)例子试验。

Answer 1:

还有,你可以在Ruby中使用做这几个库。

红宝石工具箱有他们几个的一些很好的覆盖面:

https://www.ruby-toolbox.com/categories/xml_mapping

我用XMLSimple,只需要创业板,然后使用xml_in在XML文件中加载:

require 'xmlsimple'
hash = XmlSimple.xml_in('session.xml')

如果您在Rails环境的时候,你可以只使用Active支持:

require 'active_support' 
session = Hash.from_xml('session.xml')


Answer 2:

使用引入nokogiri解析与命名空间的XML:

require 'nokogiri'

dom = Nokogiri::XML(File.read('OX.session.xml'))

node = dom.xpath('ox:CAppLogin',
                 'ox' => "http://oxbranch.optionsxpress.com").first

hash = node.element_children.each_with_object(Hash.new) do |e, h|
  h[e.name.to_sym] = e.content
end

puts hash.inspect
# {:SessionID=>"FE5E27A056944FBFBEF047F2B99E0BF6",
#  :AccountNum=>"8228-5500", :AccountID=>"967454"}

如果您知道 CAppLogin是根元素,可以简化一下:

require 'nokogiri'

dom = Nokogiri::XML(File.read('OX.session.xml'))

hash = dom.root.element_children.each_with_object(Hash.new) do |e, h|
  h[e.name.to_sym] = e.content
end

puts hash.inspect
# {:SessionID=>"FE5E27A056944FBFBEF047F2B99E0BF6",
#  :AccountNum=>"8228-5500", :AccountID=>"967454"}


文章来源: converting from xml name-values into simple hash