使用名称空间创建节点
问题描述:
我正在使用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?
答
哦,在这里我们去:Adding namespace using Nokogiri's XML Builder
显然,你要么不能创建过程中做到这一点,或者它是如此困难,即便如此不能弄明白。但是你可以做它创建后:
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
这是恼人的,但。
[添加命名空间使用Nokogiri的XML生成器]可能的重复(http://*.com/questions/8009842/adding-namespace-using-nokogiris-xml-builder) – Phrogz 2012-08-04 02:58:33
是的,这是重复的,我没有尽管如此,在我发布之前,请看。 – cbmanica 2013-02-20 21:12:48