2011-07-03 10 views
0

私の.rbファイルでxmlSimpleが正しく動作するようになっています。 xmlSimple.xmlIn(filename);を使用していますが、正しいファイルを見つける際にエラーが発生しているようです。ファイルをビンに移動し、ファイルが存在します。つまり、filename.exists? = trueです。考えられるエラーソースに関するアイデアはありますか?ありがとう!xmlSimple.xmlIn(ファイル)をRubyで使用する

-edit- この情報を追加します。私は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></p>タグ内の各「段落#」ノードを置き換えます。その後、ファイルはXmlSimple.Xml_in(filename)を使用して解析されます。どんな提案や修正も高く評価されています。

+0

サンプルXMLを提供してください。 XMLを読みやすくするためにXMLを前処理する必要はありませんが、あなたが扱っているものを見ずにはわかりません。 [Nokogiri](http://nokogiri.org)は、RubyのXMLパーサとして高く評価されており、使い方が簡単です。私はそれを学ぶことを検討することをお勧めします。 –

答えて

0

ルビーでは、Cライブラリにバインドされていない限り、xmlは遅いです。そしてそのnokogiriが最もよく管理されています。これに追加する

は、あなたの質問再:

をしかし、あなたがスレッドを使用して、ファイルが存在する場合はチェックしている場合は、正しいファイル

を見つけるとエラーが発生しているようですif文でtrue | falseを返すかもしれませんが、実際に読み取られるまでには逆の場合もあります。あなたが実際に書き込みのために開かれたfを、扱うファイルから読み取るしようとしている

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 

注:この通常のyada yada about parsing html using regexにさらに追加

私が気づい/

0

いくつかのものを適用します。 f.readlinesはおそらくfile.readlinesです。

それを扱うよりルビーのような方法がある:

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'])です。

関連する問題