2014-09-19 117 views
1

我有一個Rails 4應用程序。我添加了一個功能,以便用戶可以提供文檔並在該文檔中搜索某些單詞。我希望這可以處理文本和HTML。爲了使HTML正常工作,我想知道是否有提供HTML字符串的解析輸出的Ruby或Rails函數。Ruby/Rails:如何獲取HTML文件的解析內容?

例如,如果我有字符串<strong>Here</strong> is some <em>HTML</em>,我需要一個函數返回Here is some HTML。原因是,如果我正在搜索字符串「some HTML」,由於<em>標籤,它不會在<strong>Here</strong> is some <em>HTML</em>中找到它。但是,如果您在瀏覽器中查看HTML,則會出現「some HTML」(儘管有一些格式 - 我不關心格式)。

只是刪除尖括號中的標籤將無法正常工作,因爲如果有輸入像here are &nbsp;&nbsp;&nbsp; lots of spaces?我需要該函數返回here are lots of spaces以及解析的HTML實體。

回答

0

你想要一個XML解析器。 Nokogiri寶石非常棒。

+0

爲此,我使用了Nokogiri的.inner_text方法,然後對結果運行Rails的.squish方法以獲取可以執行搜索的字符串。 – user1002119 2014-09-29 20:22:39

0

如果你不想依賴於Nokogiri(這需要永久安裝),我認爲你可以用正則表達式獲得很長的路要走。

你基本上想要的是來自標籤的內容,而不是標籤。這通過例外。例如,你會想要消除樣式標籤和腳本標籤的內容。最後,你可能實際上想保留元標記的一些屬性。

這是一個正則表達式,它將消除所有標記。

html_string = "<html><p>Hello <strong>world</strong></p></html>" 
html_string.gsub(/<[^>]*>/, '') 
=> "Hello world" 

此正則表達式查找任何<字符後跟零個或多個字符,然後通過>,並用一個空字符串替換它。

要優化這一點,您可能還想要替換html實體,例如&oslash;與真正的unicode字符,使其可搜索。