2

XMLのリストを使用してXMLを作成しようとしています。

これがXMLのリストの例です

java.xml:

<JavaDetails>
   <SomeList> ... </SomeList>
   ....
</JavaDetails>

c.xml

<CDetails>
   <SomeList> ... </SomeList>
   ....
</CDetails>

上記のXMLを使用してProgramming.xmlを作成したい

次のようになります。

<programming>
 <Java>
   <JavaDetails>
    <SomeList> ... </SomeList>
    ....
   </JavaDetails>
 </Java>
 <C>
  <CDetails>
    <SomeList> ... </SomeList>
   ....
  </CDetails>
 </C>
</programming>

私は現在、パフォーマンスが主要な要因であるのと同じことを行うためにnokogiriを検討しています。私にはわからないのは、出力XMLのノードを作成する方法です。Nokogiriを使用したRubyのコードヘルプは大歓迎です。

4

2 に答える 2

2

特定のルートを持つ新しい XML ファイルを作成するには、次のように簡単にできます。

doc = Nokogiri.XML("<programming/>")

そのドキュメントに子ノードを追加する 1 つの方法:

java = doc.root.add_child('<Java/>').first

ディスクから別の XML ファイルを読み込んで追加するには、次のようにします。

java_details = Nokogiri.XML( IO.read )
java << java_details.root

したがって、ファイル名の配列があり、名前に基づいてそれぞれからラッピング要素を作成したい場合:

require 'nokogiri'
files = %w[ java.xml c.xml ]
doc   = Nokogiri.XML('<programming/>')

files.each do |filename|
  wrap_name = File.basename(filename,'.*').capitalize
  wrapper   = doc.root.add_child("<#{wrap_name} />").first
  wrapper   << Nokogiri.XML(IO.read(filename)).root
end

puts doc

または、Nokogiri の Builder インターフェースを使用する場合:

builder = Nokogiri::XML::Builder.new do |xml|
  xml.programming do
    files.each do |filename|
      wrap_name = File.basename(filename,'.*').capitalize
      xml.send(wrap_name) do
        xml.parent << Nokogiri.XML(IO.read(filename)).root
      end
    end
  end
end

puts builder.to_xml
于 2012-06-11T13:27:09.833 に答える
0

インストールするには:

gem install nokogiri

構文は次のとおりです。

require 'nokogiri'

builder = Nokogiri::XML::Builder.new do |xml|
  xml.programming {
    xml.Java {
      xml.JavaDetails {
        xml.SomeList 'List item'
      }
    }
  }
end

結果は次の方法で取得できますto_xml

builder.to_xml

チッ!

于 2012-06-10T21:05:36.897 に答える