2012-08-04 4 views
0

J'utilise Nokogiri pour compiler du code XML. J'ai besoin de créer un nœud dans un espace de noms qui déclare le même espace de noms. Comme d'habitude avec XML, ce processus s'avère ennuyeux. J'ai besoin XML qui ressemble àCréer un nœud avec un espace de noms

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

Ce (évidemment) ne me donne pas à:

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 

Ni ne ceci:

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 

Comment puis-je obtenir Nokogiri pour donner moi le XML que je veux?

+0

duplication possible de [Ajout d'un espace de nom à l'aide de XML Builder de Nokogiri] (http://stackoverflow.com/questions/8009842/adding-namespace-using-nokogiris-xml-builder) – Phrogz

+0

Oui, c'est un doublon, je n'ai pas vois ça avant de poster, cependant. – cbmanica

Répondre

-1

Oh, ici nous allons: Adding namespace using Nokogiri's XML Builder

Apparemment, soit vous ne peut pas le faire lors de la création, ou il est si difficile que même ne peut donc pas comprendre. Mais vous pouvez faire après la création:

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 

C'était ennuyeux, cependant.

Questions connexes