我正在使用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?
答案 0 :(得分:-1)
哦,我们走了:Adding namespace using Nokogiri's 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
但是,这很烦人。