0

パートナーから提供された仕様を使用して XML ドキュメントを作成しようとしていますが、指定どおりに XML フィールド名を作成する際に問題が発生しています。通常、出力が以下の例のように表示されるようにフィールド名を作成します。

def build_xml(output_rows)
builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|     
xml.BATCH{
  xml.HEADER{
      xml.CBPosterEmail ("test@foo.com")
      xml.CBPosterPassword ('123456')
      xml.CBReplace ('Yes')
      xml.CBReplyTo ('replytome@foo.com')
  } #xml HEADER


<Header>
<CBEmail>test@foo.com</CBEmail>
<CBPosterPassword>123456</CBPosterPassword>
<CBReplace>Yes</CBReplace>
<CBReplyTo>replytome@foo.com</CBReplyTo>
</Header>

以下の例のように、出力にフィールド名を表示する必要があります。

<Header>
<Field name="CBPosterEmail" value="test@foo.com" />
<Field name="CBPosterPassword" value="123456" />
<Field name=”CbReplace” value=”Yes”&gt;
<Field name=”CBReplyTo” value=”replytome@foo.com”&gt;
</Header>

Field name=" と value= piece を追加しようとするとエラーが発生します.

4

2 に答える 2

3
require 'nokogiri'
builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
xml.batch {
  xml.header {
    xml.field(:name => "CBPosterEmail", :value => "test@foo.com")
    xml.field(:name => "CBPosterPassword", :value => "123456")
    xml.field(:name => "CBReplace", :value => "Yes")
    xml.field(:name => "CBReplyTo", :value => "replytome@foo.com")
  }
}
end
puts builder.to_xml

=> <?xml version="1.0" encoding="utf-8"?>
<batch>
  <header>
    <field name="CBPosterEmail" value="test@foo.com"/>
    <field name="CBPosterPassword" value="123456"/>
    <field name="CBReplace" value="Yes"/>
    <field name="CBReplyTo" value="replytome@foo.com"/>
  </header>
</batch>
于 2013-01-09T18:45:40.087 に答える
2

NokogiriのBuilderドキュメントの「タグ属性」セクションを参照してください。

builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|     
  xml.BATCH{
    xml.HEADER{
      xml.Field( name: 'CBPosterEmail',    value: 'test@foo.com'      )
      xml.Field( name: 'CBPosterPassword', value: '123456'            )
      xml.Field( name: 'CBReplace',        value: 'Yes'               )
      xml.Field( name: 'CBReplyTo',        value: 'replytome@foo.com' )
    }
  }
end

puts builder.to_xml

その結果:

<?xml version="1.0" encoding="utf-8"?>
<BATCH>
  <HEADER>
    <Field name="CBPosterEmail" value="test@foo.com"/>
    <Field name="CBPosterPassword" value="123456"/>
    <Field name="CBReplace" value="Yes"/>
    <Field name="CBReplyTo" value="replytome@foo.com"/>
  </HEADER>
</BATCH>

サンプルコードは、<BATCH>タグを追加しようとしていることを示していますが、目的の出力サンプルにはタグが表示されていません。出力サンプルが正しい場合、これにより次のように生成されます。

builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|     
  xml.HEADER{
    xml.Field( name: 'CBPosterEmail',    value: 'test@foo.com'      )
    xml.Field( name: 'CBPosterPassword', value: '123456'            )
    xml.Field( name: 'CBReplace',        value: 'Yes'               )
    xml.Field( name: 'CBReplyTo',        value: 'replytome@foo.com' )
  }
end

その結果:

<?xml version="1.0" encoding="utf-8"?>
<HEADER>
  <Field name="CBPosterEmail" value="test@foo.com"/>
  <Field name="CBPosterPassword" value="123456"/>
  <Field name="CBReplace" value="Yes"/>
  <Field name="CBReplyTo" value="replytome@foo.com"/>
</HEADER>
于 2013-01-09T18:49:05.010 に答える