如何在红宝石中剪掉字符串中的短语?

时间:2011-03-10 21:25:26

标签: ruby string nokogiri

我不确定我的问题名称。我有一个使用nokogiri的HTML页面。现在我想从该页面上删除一些标签。在将html转换为字符串后,我尝试使用ruby的delete方法 - 虽然它删除了我输入的所有字母。我得到的最好结果是使用.gsub('<stuff>', '')虽然它仍留有一些空间。是否有可能实际切割字符串的东西?具体的解剖? 另一个问题 - 我可以删除空格吗?

到目前为止我做了什么:

doc = Nokogiri::HTML(open("http://www.example.com/"))
tester = doc.css(".example").to_s.gsub('<div class="example">', '')

2 个答案:

答案 0 :(得分:1)

我建议尝试在xml树级别而不是字符串编辑。 我认为nokogiri api为你提供了一些工具。

另一种方法可能是使用css或xpath选择所需的数据,而不是删除不需要的部分?

还有一个用于规范字符串空间的xpath函数,有一个例子in this question

一些nokogiri的帮助:

答案 1 :(得分:1)

查看Nokogiri的教程。特别是,您想阅读"Modifying an HTML / XML Document", Changing text contents

Nokogiri的XML访问器非常友好,因为您不需要使用XPath。您也可以使用CSS访问器,对于那些整天不使用XML的人来说,他们可以提供很多帮助。

在该特定示例中,他们使用at_css方法,该方法搜索目标的第一次出现。您有许多替代方法,即同义词:at%at_cssat_xpath处理“查找第一个”案例。 searchcssxpath/类似地处理“查找所有事件”。

例如:

require 'nokogiri'

html = '<h1>Snap, Crackle and Pop</h1>'

doc = Nokogiri::HTML(html)
h1 = doc.at('h1') 
h1.content = h1.content[0, h1.content.length - 3] + '...'

puts doc.to_html

>> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
>> <html><body><h1>Snap, Crackle and ...</h1></body></html>

在Nokogiri中创建一个新的HTML文档,搜索第一个H1,并修剪其内容中的尾随三个字符,用省略号替换它们。