我不知道如何表达这个问题,但我坚持在主循环运行后如何打印文本。我正在与 builder 一起生成一些 XML。问题是我想打印以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<twenty4threshold xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servicedef>
<hostname></hostname>
</servicedef>
<servicedef>
<hostname></hostname>
</servicedef>
<hours hoursID="1">
</hours>
<hours hoursID="2">
</hours>
</twenty4threshold>
请注意hourID
s 是如何结束的但我得到以下信息:
<?xml version="1.0" encoding="UTF-8"?>
<twenty4threshold xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servicedef>
<hostname></hostname>
</servicedef>
<hours hoursID="1">
</hours>
<servicedef>
<hostname></hostname>
</servicedef>
<hours hoursID="2">
</hours>
</twenty4threshold>
这是可以理解的,因为我在 foreach 循环中打印文本。我不明白的是如何在 servicedef 的第一个块之后打印 hoursID XML 语句。我在想一个嵌套的for循环?我也试过了,但没有运气。任何关于我做错了什么的建议表示赞赏。
这是我的代码:
#!/usr/bin/env ruby
require 'builder'
builder = Builder::XmlMarkup.new(:target=>STDOUT, :indent=>2)
builder.instruct! :xml, :version => '1.0', :encoding => 'UTF-8'
builder.twenty4threshold("xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance") {
source = File.new "host.txt"
hid = 0
source.readlines.each do |access|
hid = hid += 1;
builder.servicedef { |b| b.hostname(""); }
builder.hours(:hoursID => "#{hid}") { }
end