使用join/each-ruby连接变量
我试图找出如何将一些XML转换成一个可读性好的语句。我目前正在使用Nokogiri,在尝试执行以下操作时遇到了问题:使用join/each-ruby连接变量,ruby,nokogiri,Ruby,Nokogiri,我试图找出如何将一些XML转换成一个可读性好的语句。我目前正在使用Nokogiri,在尝试执行以下操作时遇到了问题: <baz> <option id="foo">Hello</option> <option id="bar">World</option> </baz> baz has options: 'Foo' = 'Hello', 'Bar' = 'World' 我要转换以下内容: <baz&
<baz>
<option id="foo">Hello</option>
<option id="bar">World</option>
</baz>
baz has options: 'Foo' = 'Hello', 'Bar' = 'World'
我要转换以下内容:
<baz>
<option id="foo">Hello</option>
<option id="bar">World</option>
</baz>
baz has options: 'Foo' = 'Hello', 'Bar' = 'World'
我目前正在使用以下代码来实现这一点,但我觉得一定有更好的方法使用join,我似乎无法理解
optText = "baz has options:"
baznode.xpath("option").each { |opt|
optText << "'#{opt.xpath("@id").text}' = '#{opt.text}', "
}
optText << args[0..-3] << "\n"
optText=“baz有选项:”
xpath(“option”)。每个{opt}
optText除了可能使用collect
/join
之外,我看不出使用它有什么好处
opts = baznode.xpath("option").collect do |opt|
"'#{opt.xpath("@id").text}' = '#{opt.text}'" }
end.join(", ")
optText = "baz has options: #{opts} #{args[0..-3]}\n"
我可能会将输出更改为类似以下内容:
baz has options:
foo = bar
plugh = xyzzy
当然,这完全取决于你的需要。如果有很多选项,那么扫描一行可能会有点困难,但是如果没有,原始的可能更容易在精神上解析
如果你到处都在用多个“东西”来做这件事,那么将其转换成JSON/YAML并将其转储可能是有意义的,除非你想要真正的可读文本。除了可能使用收集/加入之外,我看不出使用它有什么好处
opts = baznode.xpath("option").collect do |opt|
"'#{opt.xpath("@id").text}' = '#{opt.text}'" }
end.join(", ")
optText = "baz has options: #{opts} #{args[0..-3]}\n"
我可能会将输出更改为类似以下内容:
baz has options:
foo = bar
plugh = xyzzy
当然,这完全取决于你的需要。如果有很多选项,那么扫描一行可能会有点困难,但是如果没有,原始的可能更容易在精神上解析
如果你到处都在用多个“东西”做这件事,那么将其转换成JSON/YAML并转储它可能是有意义的,除非你想要真正的人类可读文本。是的,谢谢。我实际上是在将XML解析成人类可读的文本,仅此而已,转储更多的“报告”样式输出。谢谢你的建议。是的,谢谢。实际上我正在将XML解析为人类可读的文本,仅此而已,以转储更多的“报告”样式输出。谢谢你的建议。