【发布时间】:2013-06-01 16:36:14
【问题描述】:
我正在编写一个 Ruby (1.9.3) 脚本,它从文件夹中读取 XML 文件,然后在必要时对其进行编辑。
我的问题是我收到了由Tidy 转换的 XML 文件,但它的输出有点奇怪,例如:
<?xml version="1.0" encoding="utf-8"?>
<XML>
<item>
<ID>000001</ID>
<YEAR>2013</YEAR>
<SUPPLIER>Supplier name test,
Coproration</SUPPLIER>
...
如您所见,拥有和额外的 CRLF。我不知道为什么它有这种行为,但我正在用 ruby 脚本解决它。但是我遇到了麻烦,因为我需要查看该行的最后一个字符是“>”还是第一个字符是“”,以便我可以查看是否存在标记有问题。
我试过了:
Dir.glob("C:/testing/corrected/*.xml").each do |file|
puts file
File.open(file, 'r+').each_with_index do |line, index|
first_char = line[0,1]
if first_char != "<"
//copy this line to the previous line and delete this one?
end
end
end
我也觉得我应该将原始文件内容复制到另一个临时文件然后覆盖。这是最好的“方式”吗?欢迎任何提示,因为我在更改文件内容方面没有太多经验。
问候
【问题讨论】:
-
我建议你使用
nokogiri。 -
@RubyLovely 建议使用 xml gem,例如 nokogiri。您正在尝试将 xml 处理为 txt,这既不是一个好主意,而且在重新发明轮子方面效率很低
-
嗯,我明白了,我不局限于 ruby,但我会研究 Nokogiri。我希望 Tidy 不会造成这样的麻烦,呵呵 :)
-
正则表达式:
/^</,/>$/,但是那些家伙说的。每当您想到“文本处理”时,就想到“正则表达式”,但每当您想到“格式化文本处理”时,请先去寻找宝石。 -
你也可以
line[0]和line[-1]作为第一个和最后一个字符。
标签: ruby xml ruby-1.9.3