0

XMLを読みやすいステートメントに変換する方法を見つけようとしています。私は現在Nokogiriを使用していますが、次のことをしようとしているときに行き詰まりました:

以下を変換したい。

<baz>
    <option id="foo">Hello</option>
    <option id="bar">World</option>
</baz>

以下に:

baz has options: 'Foo' = 'Hello', 'Bar' = 'World'

現在、これを実現するために次のコードを使用していますが、結合を使用するより良い方法があるはずだと感じており、それを理解できないようです。

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 に答える