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?

4

1 回答 1

-1

哦,我们开始:使用 Nokogiri 的 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

不过,这很烦人。

于 2012-08-04T00:25:32.830 回答