Ruby on rails 在rails 3.0.9中使用Nokogiri捕获XML响应

Ruby on rails 在rails 3.0.9中使用Nokogiri捕获XML响应,ruby-on-rails,nokogiri,Ruby On Rails,Nokogiri,我正在尝试验证登录过程,在我的登录过程中,如果用户名和密码正确,则用户将登录到其仪表板,但如果用户名和密码错误,则我将收到一个XML响应 以下是会话控制器代码 { 需要“net/http” 需要“uri” 需要“打开uri” 需要“nokogiri” 类sessioncontroller

我正在尝试验证登录过程,在我的登录过程中,如果用户名和密码正确,则用户将登录到其仪表板,但如果用户名和密码错误,则我将收到一个XML响应

以下是会话控制器代码

{

需要“net/http”
需要“uri”
需要“打开uri”
需要“nokogiri”
类sessioncontroller
}

我从服务器得到这种XML响应

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<action>
<name>login</name>
<status>failed</status>
<status_message>Error description</status_message>
</action>

登录
失败
错误描述
当我得到这个响应时,我想使用上面的XML响应刷新错误消息


如果任何人有任何想法,我都可以拯救我的一天。

嘿,伙计们,我终于完成了上述功能。这并不像我想的那样困难,我正在这里粘贴确切的代码片段

def create

 a = "http://<SERVER IP>/billing/api/login?u=#{params[:session][:email]}&p=#{params[:session][:password]}"   

 # Nokogiri Gem is used to Catch the XML response from the MOR & call the appropriate action on the received status

  doc = Nokogiri::XML(open(a))
     doc.xpath('/action/status').each do |link|  
    @abc = link.content
     end 

    # Condition to check whether the received response is 'Ok' or 'Failed' 

    if @abc == 'failed'

            flash[:notice] = "Invalid Username/Password" # If condition is failed redirect to root page
             redirect_to '/' 
           else
                # if condition is 'ok' redirect to MOR user dashboard

               redirect_to "http://<SERVER IP>/billing/api/login?u=#{params[:session][:email]}&p=#{params[:session][:password]}"
         end                                        
def创建
a=”http:///billing/api/login?u=#{params[:session][:email]}&p={params[:session][:password]}”
#Nokogiri Gem用于捕获来自MOR的XML响应,并对接收到的状态调用适当的操作
doc=Nokogiri::XML(开放(a))
doc.xpath('/action/status')。每个do | link |
@abc=link.content
结束
#检查接收到的响应是“正常”还是“失败”的条件
如果@abc==“失败”
flash[:notice]=“无效用户名/密码”#如果条件失败,则重定向到根页面
将_重定向到“/”
其他的
#如果条件为“正常”,则重定向至MOR用户仪表板
将_重定向到“http:///billing/api/login?u=#{params[:session][:email]}&p={params[:session][:password]}”
结束

end

Nokogiri让您可以直接访问文档的文本:

require 'nokogiri'

doc = Nokogiri::XML(
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<action>
<name>login</name>
<status>failed</status>
<status_message>Error description</status_message>
</action>'
)
您可以将代码简化为以下内容:

doc = Nokogiri::XML(open(a))

if doc.text['failed']
  ...
doc.text

>> "\nlogin\nfailed\nError description\n"
doc = Nokogiri::XML(open(a))

if doc.text['failed']
  ...