Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ruby to_xml设置根属性_Ruby On Rails_Ruby_Xml_Data Conversion - Fatal编程技术网

Ruby on rails ruby to_xml设置根属性

Ruby on rails ruby to_xml设置根属性,ruby-on-rails,ruby,xml,data-conversion,Ruby On Rails,Ruby,Xml,Data Conversion,我需要将ruby哈希转换为xml。下面是散列: hash = { "AffiliateInfo" => { "Username" => '123456', "Password" => "Mypass", "TrackingCampaign" => "MyTrackingCampaign", "Env" => "production" } } 以及我想要生成的xml: <?xml vers

我需要将ruby哈希转换为xml。下面是散列:

hash = {
      "AffiliateInfo" => {
      "Username" => '123456',
      "Password" => "Mypass",
      "TrackingCampaign" => "MyTrackingCampaign",
      "Env" => "production"
    }
  }
以及我想要生成的xml:

<?xml version="1.0" encoding="UTF-8"?>
<InsuranceRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AffiliateInfo>
  <Username>12696</Username>
  <Password>MyPassword</Password>
  <TrackingCampaign>MyTrackingCampaign</TrackingCampaign>
  <LeadSourceID>SourceID</LeadSourceID>
  <ProductionEnvironment>true</ProductionEnvironment>
  </AffiliateInfo>
</InsuranceRequest>
我得到以下xml输出

<?xml version="1.0" encoding="UTF-8"?>
<InsuranceRequest>
  <AffiliateInfo>
    <Username>123456</Username>
    <Password>Mypass</Password>
    <TrackingCampaign>MyTrackingCampaign</TrackingCampaign>
    <Env>production</Env>
  </AffiliateInfo>
</InsuranceRequest>
我无法向根节点添加属性。有没有一种方法可以使用
到\u xml
方法添加这些属性


请建议是否有其他方法来解决我的问题。

您需要使用自定义生成器。下面是Nokogiri builder的示例

require 'nokogiri'

hash = {"AffiliateInfo" => {
          "Username" => '123456',
          "Password" => "Mypass",
          "TrackingCampaign" => "MyTrackingCampaign",
          "Env" => "production"
         }
       }


builder = Nokogiri::XML::Builder.new do |xml|
  xml.InsuranceRequest('xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema') do
    xml.AffiliateInfo do
      hash['AffiliateInfo'].each do |k, v|
        xml.send(k, v)
      end
    end
  end
end

builder.to_xml
这将生成以下XML文档

<?xml version="1.0"?>
<InsuranceRequest
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <AffiliateInfo>
        <Username>123456</Username>
        <Password>Mypass</Password>
        <TrackingCampaign>MyTrackingCampaign</TrackingCampaign>
        <Env>production</Env>
    </AffiliateInfo>
</InsuranceRequest>


您需要使用自定义生成器。下面是Nokogiri builder的示例

require 'nokogiri'

hash = {"AffiliateInfo" => {
          "Username" => '123456',
          "Password" => "Mypass",
          "TrackingCampaign" => "MyTrackingCampaign",
          "Env" => "production"
         }
       }


builder = Nokogiri::XML::Builder.new do |xml|
  xml.InsuranceRequest('xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema') do
    xml.AffiliateInfo do
      hash['AffiliateInfo'].each do |k, v|
        xml.send(k, v)
      end
    end
  end
end

builder.to_xml
这将生成以下XML文档

<?xml version="1.0"?>
<InsuranceRequest
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <AffiliateInfo>
        <Username>123456</Username>
        <Password>Mypass</Password>
        <TrackingCampaign>MyTrackingCampaign</TrackingCampaign>
        <Env>production</Env>
    </AffiliateInfo>
</InsuranceRequest>