Ruby 使用Savon时格式化Web服务的响应XML

Ruby 使用Savon时格式化Web服务的响应XML,ruby,web-services,savon,Ruby,Web Services,Savon,我使用的是一个外部Web服务,我使用的是Savon gem 我希望在Savon之前处理Web服务的响应,以便清理XML并获得正确的哈希值。目前,Savon调用方法使用哈希进行应答: {:envelope => { :body => { :get_method_result => { :result=>"OK", :dataset_xml => "

我使用的是一个外部Web服务,我使用的是Savon gem

希望在Savon之前处理Web服务的响应,以便清理XML并获得正确的哈希值。目前,Savon调用方法使用哈希进行应答:

{:envelope => {
     :body => {
         :get_method_result => {
             :result=>"OK", 
                 :dataset_xml => "
                     <NewDataSet>
                         <xs:schema id=\"NewDataSet\" xmlns=\"\"........
{:envelope=>{
:正文=>{
:获取方法结果=>{
:result=>“OK”,
:dataset_xml=>“

你可以简单地用nokogiri gem自己解析xml,你已经试过了吗

我只想试试

Nokogiri::XML(response[:body])

一位朋友解决了这个问题,他添加了一个名为Apache的模块。我用它来解析传入的XML,提取CDATA字符。完成后,Savon gem收到了一个干净的XML,它在一个步骤中被完美地解析为哈希

<Location />
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|CDATAREGEX|' '|i"
</Location>

AddOutputFilterByType替换文本/html
替换为“s | CDATA正则表达式|”“i”

它显然有效……但这不是我要问的:)WS-response没有一致的XML,它有符号和>,<……因此,在Savon之后,最后,不是所有的东西都是散列的……有些值是XML字符串。这迫使我做一些像你建议的那样的事情,我不想做。我想你必须先清理它,然后n解析它。可能有人已经为此做了一个gem,但我找不到它。不过,似乎很容易做到:)只需将“>”替换为
是的,你是对的,我必须清理它然后解析它。但我现在还不想,我想这是一个非常常见的问题。因此,在Savon或Nokogiri中应该有一个标准的解决方案。我不是唯一的使用这样的Web服务的人……我希望不是那么常见:p也许如果您向我们展示大部分响应,有人可以更好地帮助您。很难用您提供的示例来说明发生了什么或什么可以解决您的问题。请在响应上向我们展示原始xml。