2016-05-10 11 views
1

ルビーハッシュをxmlに変換する必要があります。ここでは、ハッシュは次のとおりです。ruby​​ to_xml root属性を設定する

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> 

私が行うと:

hash.to_xml(root: '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> 
を取得します

出力にはRooのプロパティがありませんtノード属性:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 

属性をルートノードに追加できません。 to_xmlメソッドを使用してこれらの属性を追加する方法はありますか?

私の問題を解決する他の手段があるかどうかをご提案ください。

答えて

2

カスタムビルダーを使用する必要があります。ここではこれは、次の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> 

を生成鋸山ビルダー

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 

との一例である。ここ前ビルダー

は鋸山のドキュメントがhttp://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Builder

ある hashが定義されなければならないことに注意してください