如何使用Nokogiri更改HTML元数据



我目前正在执行一项任务,在所有.asp文件的元描述末尾添加公司名称。有了NokogiriRuby的一些知识,我认为我应该能够自动化这个"人力密集型"任务。我可以很容易地浏览应用程序,并得到一个描述列表要更改。但是,如何更改值并将其写回文件呢?

我正试图用Nokogiri做这件事,但似乎Nokogiri被设计成废弃数据和编写xml,但不完全html。(应用程序相当简单,只是包括一些重复的代码,根本没有逻辑……所以可以视为html/文本)。Nokogiri提供这个功能吗?如果不行,我还能做什么?谢谢!

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

打开文件,使用regexString来识别替换和gsub,然后写回文件。

有很多关于SO的解决方案,这里只是一个简单的例子

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

这将把"hello.txt"中的"install"替换为"upgrade"

相关内容

  • 没有找到相关文章

最新更新