0

我正在使用 Nokogiri 生成 XML。我只想向 XML 根节点添加命名空间前缀,但问题是将前缀应用于它应用于所有子元素的第一个元素。

这是我的预期结果:

<?xml version="1.0" encoding="UTF-8"?>
<req:Request xmlns:req="http://www.google.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.0">
 <LanguageCode>en</LanguageCode>
 <Enabled>Y</Enabled>
</req:Request>
4

1 回答 1

4

尝试添加属性xmlns="",这似乎向 XML 构建器提示元素应该位于默认命名空间中,除非另有声明。我相信生成的文档在语义上与您的示例等效,尽管它存在......

attrs = {
  'xmlns' => '',
  'xmlns:req' => 'http://www.google.com',
  'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
  'schemaVersion' => '1.0',
}
builder = Nokogiri::XML::Builder.new do |xml|
  xml['req'].Request(attrs) {
    xml.LanguageCode('en')
    xml.Enabled('Y')
  }
end

builder.to_xml # =>
# <?xml version="1.0"?>
# <req:Request xmlns="" xmlns:req="http://www.google.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.0">
#   <LanguageCode>en</LanguageCode>
#   <Enabled>Y</Enabled>
# </req:Request>
于 2015-05-18T17:16:46.017 回答