0

我无法让 xmlSimple 在我的 .rb 文件中正确运行。我正在使用xmlSimple.xmlIn(filename);,但是,找到正确的文件似乎有错误。我已将文件移动到 bin 并且文件存在,意思是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实际上是为写入而打开的。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'])

于 2011-07-04T10:30:49.950 回答
0

我的理解是,在 ruby​​ 中,除非绑定到 C 库,否则 xml 非常慢。那个nokogiri是这批里维护得最好的。

除此之外,您的问题是:

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

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

进一步添加关于使用正则表达式解析 html 的常用 yada yada apply /

于 2011-07-04T00:26:26.490 回答