我有一个以
开头的xml<?xml version='1.0' encoding='ISO-8859-8'?>
当我尝试
时Hash.from_xml(my_xml)
我得到#<REXML::ParseException: No close tag for /root/response/message> (REXML::ParseException)
确实存在上述编码中的字符。我需要解析那个XML,所以我猜我需要将它全部转换为utf-8或者解析所需的其他东西。
有办法做到这一点吗? (与Nokogiri一样的其他用途也很好)
答案 0 :(得分:2)
Nokogiri似乎做对了:
# test.xml
<?xml version='1.0' encoding='ISO-8859-8'?>
<what>
<body>דה</body>
</what>
xml = Nokogiri::XML(File.read 'test.xml')
puts xml.at_xpath('//body').content
# => "דה"
你也可以告诉Nokogiri使用什么编码(例如Nokogiri::XML(File.read('test.xml'), nil, 'ISO-8859-8')
),但这里似乎没有必要。
如果这没有帮助,您可能需要检查XML是否格式正确。
如果您愿意,可以将XML转换为UTF-8:
xml2 = xml.serialize(:encoding => 'UTF-8') {|c| c.format.as_xml }
如果您只想将Nokogiri XML转换为哈希值,请在此处查看一些解决方案:Convert a Nokogiri document to a Ruby Hash,或者您可以执行:Hash.from_xml(xml2)
。