0

.rb ファイルで xmlSimple を正しく実行するのに問題があります。を使用してxmlSimple.xmlIn(filename);いますが、正しいファイルの検索でエラーが発生しているようです。ファイルをビンに移動しましたが、ファイルが存在します。つまり、filename.exists? = true. 考えられるエラーの原因に関するアイデアはありますか? ありがとう!

-編集- この情報を追加させてください。私はRubyに非常に慣れていないため、メソッドまたは構文が完全に間違っている可能性が高い.rbファイルのコードは次のとおりです。

require 'xmlsimple'

file_name = 'xmldatatest.xml'

paragraph_str = 0

file = File.open(file_name) # takes XML Data and creates a file of the data

File.open(file_name, "w+") do |f|     # open file for update

lines = f.readlines           # read into array of lines

lines.each do 

    |it|           
                  # modify lines
        it.gsub!(/\n/, '')
    it.gsub!('<p>', '')
    it.gsub!('</p>', '')
    it.gsub!('\"Paragraph.\"', 'Paragraph')
    if ((it.include? ('Paragraph')) == 1)
    paragraph_str += 1
    end

   while paragraph_str > 0 do

    initial_value = paragraph_str

    if ((paragraph_str == initial_value))
    it.gsub!(/Paragraph/, '<p>')
    paragraph_str -= 1
    else 
    it.gsub!(/Paragraph/, '</p><p>')
    paragraph_str -= 1
    end

    end    
    f.print lines                 # write out modified lines
    end
end

File.open(file_name, 'a') {|f| f.puts "</p>" }

ref  = XmlSimple.xml_in(file_name)

このプログラムの目的は、元の XML ファイルからすべてのエスケープ文字を取り除き、<p>and</p>タグ内の各「Paragraph#」ノードを置き換えることです。その後、ファイルは を使用して解析されますXmlSimple.Xml_in(filename)。提案や修正は大歓迎です。

4

2 に答える 2

0

私が気づいたいくつかのこと:

file = File.open(file_name) # takes XML Data and creates a file of the data

File.open(file_name, "w+") do |f|     # open file for update

lines = f.readlines           # read into array of lines

f実際に書き込み用に開かれているファイル handle から読み取ろうとしていることに注意してください。f.readlinesおそらくあるはずfile.readlinesです。

それを処理するためのよりRuby的な方法は次のとおりです。

lines = []
File.open(file_name) do |f|
  lines = f.readlines
end

コード レビューで気になるもう 1 つの問題は、追加用と同じファイルを読み取り用に開いていることです。一方から読み取り、新しく作成された別のファイルに書き込み、終了したら両方を閉じ、古いファイルの名前を変更してから、新しいファイルの名前を古いファイルの名前に変更し、名前を変更した古いファイルを削除することをお勧めしますもういらないなら。これは、処理中に何かが失敗した場合の保護戦術です。

it.gsub!(/\n/, '')のように書くことができますit.chomp!

if ((it.include? ('Paragraph')) == 1)可能性がありますif (it['Paragraph'])

于 2011-07-04T10:30:49.950 に答える
0

私の理解では、Ruby では、C ライブラリにバインドされていない限り、xml は非常に遅いです。そして、そのノコギリは多くの中で最もよく維持されています.

これに加えて、あなたの質問について:

ただし、正しいファイルの検索にエラーがあるようです

スレッドを使用してファイルが存在するかどうかを確認している場合、if ステートメントで true|false が返される可能性がありますが、実際に読み取られるまでには逆になる可能性があります。

これに、正規表現を使用した html の解析に関する通常のyada yadaをさらに追加すると、適用/

于 2011-07-04T00:26:26.490 に答える