2012-08-04 154 views
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?

+0

[添加命名空間使用Nokogiri的XML生成器]可能的重複(http://stackoverflow.com/questions/8009842/adding-namespace-using-nokogiris-xml-builder) – Phrogz 2012-08-04 02:58:33

+0

是的,這是重複的,我沒有儘管如此,在我發佈之前,請看。 – cbmanica 2013-02-20 21:12:48

回答

-1

哦,在這裏我們去: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 

這是惱人的,但。