0

私はNokogiriを使用してXMLを構築しています。同じ名前空間を宣言する名前空間にノードを作成する必要があります。XMLの場合と同様に、このプロセスは厄介なほど難しいことがわかっています。次のようなXMLが必要です

<?xml version="1.0"?>
<bar:foo xmlns:bar="http://www.bar.com">
  <bar:baz>baz</bar:baz>
</bar:foo>

これは(明らかに)私にそれを与えません:

builder=Nokogiri::XML::Builder.new do |xml|
  # Doesn't put foo in the bar namespace
  xml.foo( "xmlns:bar" => "http://www.bar.com") do
    xml['bar'].baz "baz"
  end
end

これもしません:

builder=Nokogiri::XML::Builder.new do |xml|
  # undefined method `namespace_definitions' for #<Nokogiri::XML::Document:0x3fcc11b590ec name="document">
  xml['bar'].foo( "xmlns:bar" => "http://www.bar.com") do
    xml['bar'].baz "baz"
  end
end

Nokogiriに必要なXMLを提供させるにはどうすればよいですか?

4

1 に答える 1

-1

では、Nokogiri の XML Builder を使用して名前空間を追加します。

どうやら、作成中にこれを行うことができないか、SOでさえ理解できないほど難しいです。ただし、作成後に行うことができます。

builder=Nokogiri::XML::Builder.new do |xml|
  xml.foo( "xmlns:bar" => "http://www.bar.com") do
    xml['bar'].baz "baz"
  end
end
root=builder.doc.root
ns=root.namespace_definitions.first # because thankfully there's only one namespace here
root.namespace=tns

しかし、それは面倒でした。

于 2012-08-04T00:25:32.830 に答える