2016-03-15 52 views
0

我正在尝试与我们的仓库建立集成。他们有一个接受XML消息的API。但是,当我向他们发送消息(根据规范)时,我不断收到错误,指出我的XML无效。我相信Rails为我的消息添加了我不想要的内容。我的代码:Rails将元素添加到我的XML消息中

x = ::Builder::XmlMarkup.new(:indent=>2) 
    x.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8" 
    x.InventoryXML { 
     x.CustomerID("username") 
     x.Password("password") 
     x.Items { 
      x.ItemID(self.name) 
     } 
    } 

    http = Net::HTTP.new("www.webgistix.com") 
    response = http.post("/XML/GetInventoryForSelectedItems.asp", x.to_xml) 
    answer = self.evaluate_smartfill_response(response) 
    return x.to_s + "\n Response: " + answer.to_s 

当我打印的回报,这是我得到:

<?xml version="1.0" encoding="UTF-8"?> 
<InventoryXML> 
    <CustomerID>username</CustomerID> 
    <Password>password</Password> 
    <Items> 
    <ItemID>item</ItemID> 
    </Items>   
</InventoryXML> 
<inspect/> <to_xml/> <to_s/> 

错误:

Error: There was an error processing your request. Please check your request and try again.

我认为加标签在我的邮件的末尾可能成为问题。这些标签来自哪里,我如何防止它们被添加到我的消息中?

回答

0

我更新了我的代码,这似乎解决它:

builder = Nokogiri::XML::Builder.new do |xml| 
     xml.InventoryXML { 
      xml.CustomerID("customer") 
      xml.Password("password") 
      xml.Items { 
       xml.ItemID(self.name) 
      } 
     } 
    end 
    http = Net::HTTP.new("www.webgistix.com") 
    response = http.post("/XML/GetInventoryForSelectedItems.asp", builder.to_xml) 
    answer = self.evaluate_smartfill_response(response) 
    return builder.to_xml + "\n\n Response: " + answer.to_s