使用xmlSimple.xmlIn(文件)使用Ruby

时间:2011-07-03 14:45:53

标签: ruby xml parsing xml-simple

我无法让xmlSimple在我的.rb文件中正常运行。我正在使用xmlSimple.xmlIn(filename);,但是,找到正确的文件似乎有错误。我已将文件移动到bin并且文件存在,即filename.exists? = true。关于可能的错误来源的任何想法?谢谢!

CNC中 让我添加这些信息;我是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)解析文件。任何建议或更正都不胜感激。

2 个答案:

答案 0 :(得分:0)

据我所知,在ruby中,除非绑定到C库,否则xml会很慢。 nokogiri是该地段最好的维护。

除此之外,请回答您的问题:

  

但是,找到正确的文件似乎有错误

如果您正在使用线程并检查文件是否存在,它可能会在if语句中返回true | false,但在实际读取时可能相反。

通常yada yada about parsing html using regex适用于/

答案 1 :(得分: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中读取,该句柄实际上是为写入而打开的。 f.readlines应该是file.readlines

更像Ruby的处理方式是:

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

在代码审查中会让我感到困扰的另一个问题是,您要打开相同的文件进行阅读,以便进行追加。我建议您从一个读取,并写入另一个新创建的文件,然后在完成后关闭它们,重命名旧文件,然后将新文件重命名为旧文件的名称,然后删除重命名的旧文件如果你不再需要它了。这是一种保护策略,以防处理过程中出现故障。

it.gsub!(/\n/, '')可以写成it.chomp!

if ((it.include? ('Paragraph')) == 1)可以是if (it['Paragraph'])