【问题标题】:ruby to_xml set root attributesruby to_xml 设置根属性
【发布时间】:2016-05-10 09:17:40
【问题描述】:

我需要将 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>

当我这样做时:

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>

输出缺少根节点属性的属性:

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

我无法向根节点添加属性。有没有办法使用to_xml 方法添加这些属性?

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

【问题讨论】:

    标签: ruby-on-rails ruby xml data-conversion


    【解决方案1】:

    您需要使用自定义生成器。这是 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>
    

    请注意hash 应该定义在之前 builder

    这是 Nokogiri 文档http://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Builder

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2017-09-29
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多