0

我试图弄清楚如何将一些 XML 变成一个很好的可读语句。我目前正在使用 Nokogiri,并在尝试执行以下操作时陷入困境:

我想转换以下内容:

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

有什么建议么?

4

1 回答 1

3

除了可能使用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 并转储它可能是有意义的,除非您想要真正人类可读的文本。

于 2013-01-11T20:24:50.040 回答