Ruby 如何使用Nokogiri更改HTML元数据?

Ruby 如何使用Nokogiri更改HTML元数据?,ruby,nokogiri,Ruby,Nokogiri,我目前的任务是在所有.asp文件的元描述末尾添加公司名称。有了一点关于Nokogiri和Ruby的知识,我想我应该能够自动化这个“人力密集型”任务。我可以很容易地通过ASP,并得到了一个需要更改的描述列表。但是,如何更改该值并将其写回文件 我正试图用Nokogiri来实现这一点,但Nokogiri似乎是为了废弃数据和编写xml而设计的,但不完全是HTML。(ASP相当简单,只包含一些重复的代码,根本没有逻辑……因此可以作为html/文本处理)。Nokogiri是否提供此功能?如果没有,我还能做什

我目前的任务是在所有.asp文件的元描述末尾添加公司名称。有了一点关于
Nokogiri
Ruby
的知识,我想我应该能够自动化这个“人力密集型”任务。我可以很容易地通过ASP,并得到了一个需要更改的描述列表。但是,如何更改该值并将其写回文件


我正试图用Nokogiri来实现这一点,但Nokogiri似乎是为了废弃数据和编写xml而设计的,但不完全是HTML。(ASP相当简单,只包含一些重复的代码,根本没有逻辑……因此可以作为html/文本处理)。Nokogiri是否提供此功能?如果没有,我还能做什么?谢谢

打开文件,使用
regex
String
识别替换项,并将其适当地
gsub
写入文件

关于这一点,有很多解决方案,还有一个简单的例子

File.write("hello.txt",File.open("hello.txt",&:read).gsub("install","upgrade"))

这将把“hello.txt”中“install”一词的每个实例都替换为“upgrade”

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>
其结果是:

# >> <!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输出样式,因为网站的内容用户使用了不同的工具,并实现了一些自动化。解析器可以很好地处理它。

发布一个文件示例:您可以混淆元描述,并使文件的长度为5-10行。使用您自己的正则表达式来解析html可能会很快变得非常棘手,因此Nokogiri是一个不错的选择。Nokogiri不是设计用来废弃(e)数据的,它是一个XML解析器。HTML是具有宽松解析规则的XML,因此它也可以这样做。它可以编写XML、XHTML和HTML,这取决于你的要求。Nokogiri不是为了废弃(e)数据而设计的……哈?@7stud谢谢你的建议。只要沿着Nokogiri的道路走,就可以把它钉死(尽管答案如下……)。谢谢使用该选项将在整个文档中不加区别地更改它,而不仅仅是在元描述中。@theTinMan这并不是一个确切的答案,因为我回答他的问题时没有确切的细节。自从他问我如何才能做到这一点,这是有方向性的。最详细的回答!我被卡住了,因为最初我认为我必须通过调用一些Nokogiri方法来写回内容。太过专注于这一点,以至于我忘记了我只是在更改内存中的内容,并且可以简单地将其写入文件。
<meta 
name="description"

content="Free Web tutorials"
>