首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用涉及嵌套标签和命名空间的Nokogiri生成XML

使用涉及嵌套标签和命名空间的Nokogiri生成XML
EN

Stack Overflow用户
提问于 2019-02-22 01:54:52
回答 1查看 100关注 0票数 1

使用gem Nokogiri,我尝试生成XML,如下所示:

代码语言:javascript
复制
<?xml version='1.0'?>
  <env:Envelope xmln:env = "http://abc.ca">
    <env:Header> 
      <mm7:TransactionID xmlns:mm7="http://def.ca"> Some Text Here </mm7:TransactionID>
    </env:Header>
  </env:Envelope>

我的代码是:

代码语言:javascript
复制
env_ns = {
  "xmlns:env" => "http://abc.ca"
}

mm7_ns = {
  "xmlns:mm7" => "http://def.ca"
}

env_header = Nokogiri::XML::Builder.new do |xml|
  xml['mm7'].TransactionID(mm7_ns) do
    "Some Text Here"
  end
end

builder = Nokogiri::XML::Builder.new { |xml|
  xml['env'].Envelope(env_ns) do
    xml.Header do
      env_header
    end
  end
}

puts env_header.to_xml
puts "----------------------"

puts builder.to_xml

但是,输出并不像预期的那样,因为值"Some Text Here“没有包含在mm7:TranactionID标记中。mm7标记没有放在header标记内。此外,header标签没有放在信封标签内。

代码语言:javascript
复制
<?xml version="1.0"?>
  <mm7:TransactionID xmlns:mm7="http://def.ca"/>
-----------------------------------------------------------
<?xml version="1.0"?>
  <env:Envelope xmlns:env="http://abc.ca">
   <env:Header/>
  </env:Envelope>

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 03:52:17

你只需要一个构建器:

代码语言:javascript
复制
env_ns = {
  "xmlns:env" => "http://abc.ca"
}

mm7_ns = {
  "xmlns:mm7" => "http://def.ca"
}

builder = Nokogiri::XML::Builder.new do |xml|
  xml['env'].Envelope(env_ns) do
    xml.Header do
      xml['mm7'].TransactionID(mm7_ns, "Some Text Here")
    end
  end
end

puts builder.to_xml

# will render the following:
# <?xml version="1.0"?>
# <env:Envelope xmlns:env="http://abc.ca">
#   <env:Header>
#     <mm7:TransactionID xmlns:mm7="http://def.ca">Some Text Here</mm7:TransactionID>
#   </env:Header>
# </env:Envelope>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54813350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档