我无法让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)
解析文件。任何建议或更正都不胜感激。
答案 0 :(得分:0)
据我所知,在ruby中,除非绑定到C库,否则xml会很慢。 nokogiri是该地段最好的维护。
除此之外,请回答您的问题:
但是,找到正确的文件似乎有错误
如果您正在使用线程并检查文件是否存在,它可能会在if语句中返回true | false,但在实际读取时可能相反。
答案 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'])
。