我目前的任务是在所有.asp文件的元描述末尾添加公司名称。通过对Nokogiri
和Ruby
的一些了解,我认为我应该能够自动完成这项“人力密集型”任务。我可以轻松地搜索asps,并获得一个要更改的描述列表。但是,如何更改值并将其写回文件?
我试图用Nokogiri这样做,但似乎Nokogiri被设计为废弃数据并编写xml但不是很好的htmls。 (asps非常简单,只包含一些重复的代码,根本没有逻辑......因此可以视为html / text)。 Nokogiri是否提供此功能?如果没有,我还能做什么?谢谢!
答案 0 :(得分:2)
Nokogiri非常出色:
require 'nokogiri'
doc = Nokogiri::HTML.parse(<<EOT)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="description" content="Free Web tutorials">
</head>
<body></body>
</html>
EOT
meta = doc.at('meta[@name]')
meta['content'] = 'foo'
puts doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html>
# >> <head>
# >> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
# >> <meta name="description" content="foo">
# >> </head>
# >> <body></body>
# >> </html>
如果您想在说明的content
附加内容:
meta['content'] = meta['content'] + ' by foobar'
结果是:
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html>
# >> <head>
# >> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
# >> <meta name="description" content="Free Web tutorials by foobar">
# >> </head>
# >> <body></body>
# >> </html>
如果创作者更改为不同的HTML生成器,那么您无法控制的HTML可能会以疯狂和奇妙的方式进行更改。这可能会破坏您的应用程序,除非您使用强大的东西,并且HTML的正则表达式不够健壮。
编写匹配的模式很容易
<meta name="description" content="Free Web tutorials">
写一个匹配那天的那个并不容易,然后
<meta
name="description"
content="Free Web tutorials"
>
下一个。
很容易想象看到各种HTML输出样式,因为网站的内容人们使用了不同的工具,以及一些自动化。解析器可以很好地处理它。
答案 1 :(得分:0)
使用regex
或String
打开文件以确定替换文件,并gsub
将其正确识别,然后写回文件。
这个Heres just one的SO有很多解决方案和一个简短的例子
File.write("hello.txt",File.open("hello.txt",&:read).gsub("install","upgrade"))
这将用“upgrade”替换“hello.txt”中“install”一词的每个实例