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