0

既存の XML ファイルを拡張して新しいノードを追加しようとしています。多くの製品を含む XML を読み込み、新しい製品を追加して保存します。

Nokogiri と Ruby 1.9.3 を使用しています。

これは私が作成した最高のものです:

builder = Nokogiri::XML::Builder.new do
  root do
    load_xml = Nokogiri::XML(IO.read("test.xml"))
    parent.add_child(load_xml.root)
    data do
      name "Name"
    end
  end
end

file = File.open("test.xml",'w')
file.puts builder.to_xml
file.close
4

1 に答える 1

5

Nokogiri::XML::Builder実際には、XML ファイルを編集するときではなく、新しい XML ファイルを作成するときにのみ使用されます。

また、コードは XML をロードし、新しいルート ノード (ルート) に配置し、新しい子 (データ ノード) を追加します。これは本当に望ましい動作ですか?

通常、次のようにノードを追加します。

doc = Nokogiri::XML(IO.read("test.xml"))
name_node = Nokogiri::XML::Node.new("name",doc)
name_node.content = "Name"
data_node = Nokogiri::XML::Node.new("data",doc)
data_node.add_child(name_node)
doc.root.add_child(data_node)

file = File.open("test.xml",'w')
file.puts doc.to_xml
file.close

これは私には少し独特のように見えるため、新しいルートノードを作成していません...

Nokogiri-Documentationも試してみてください。かなり広範囲です。

data から、およびdataNokogiri::XML::Builderを含むすべての欠点を作成するために使用する他の方法があります。これは、この組み合わせたアプローチの例になります。

builder = Nokogiri::XML::Builder.new do
  data do 
    name "Name"
  end
end
doc = Nokogiri::XML(IO.read("test.xml"))
doc.root.add_child builder.doc.root

file = File.open("test.xml",'w')
file.puts doc.to_xml
file.close
于 2012-07-18T16:15:52.873 に答える