簡體   English   中英

使用Nokogiri的XML生成涉及嵌套標簽和名稱空間

[英]XML generation using Nokogiri involving nested tags and namespace

使用寶石Nokogiri我試圖生成XML,如:

<?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>

我的代碼是:

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標簽沒有放在標頭標簽內。 另外,標頭標簽也不在信封標簽內。

<?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>

謝謝。

您只需要1個構建器:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM