0

優れた xml 解析モジュールがいくつかあることは知っていますが、それらを使用する前に、非常に単純化された独自のモジュールを作成してみたいと思いました。

私が望むのは、終了タグの最後に改行文字があることだけです。私はgsubでいくつかのことを試しました. 既存の正規表現の一致に「\ n」を追加する方法、または一致した値を変数に保存して改行を追加して再挿入する方法はまだわかりません。

繰り返しになりますが、私よりもはるかに優れた仕事をする XML 解析モジュールがあることは知っていますが、少なくとも私のロジックで正しい道を進んでいるか、それとも (ゼロから) より優れた方法があるかを確認したいと思います。仕方。

4

2 に答える 2

3

難しい方法でそれをやりたいと思うことは立派であり、すべてのプログラマーが少なくとも一度は行うことですが、それはひどくエラーを起こしやすいです.

パーサーを使って構築することを強くお勧めします。

require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<xml><t1/><t2>foo</t2></xml>
EOT

doc.each do |node|
  node.replace(node.to_s << "\n") unless node.text?
end

puts doc.to_xml

次のようになります。

<?xml version="1.0"?>
<xml>
  <t1/>
  <t2>foo</t2>
</xml>

素朴な「パターンでやる」アプローチの問題は、CDATAブロックに遭遇する可能性があることです。

<![CDATA[ This can contain > < " & <foo></bar> ]]>

パターンを使用してタグ間に埋め込まれた XML を処理してみて、問題をトラップするためのコードを書くのにどれだけの時間がかかるか、または与えられたダメージを巻き戻すのにどれだけの時間がかかるかを見てください。

于 2013-05-20T18:02:48.740 に答える