Ruby 创建具有命名空间的节点
我正在使用Nokogiri构建一些XML。我需要在一个名称空间中创建一个节点来声明相同的名称空间。与XML一样,这个过程被证明是非常困难的。我需要看起来像Ruby 创建具有命名空间的节点,ruby,nokogiri,Ruby,Nokogiri,我正在使用Nokogiri构建一些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 d
<?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|
# 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?哦,我们开始:
显然,你要么在创作过程中做不到这一点,要么这太难了,以至于你无法理解。但您可以在创建后执行此操作:
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
但这很烦人。可能是重复的,是重复的,但我在发布之前没有看到。
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