2016-09-13 34 views
0

我在Ruby on Rails 4.2.7中使用Nokogiri。我如何說我想在名稱爲「範圍」的另一個元素中查找所有「選項」元素?我試圖在Nokogiri中嘗試查找命名元素中的元素時獲取「Invlaid expression」

response = http.request(req) 
    doc = Nokogiri::HTML(response.body) 
… 
options = doc.xpath(「//range option") 

,但它給我的錯誤

Error during processing: Invalid expression: //range option 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:165:in `evaluate' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:165:in `block in xpath' 
/Users/davea/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.8/lib/nokogiri/xml/searchable.rb:156:in `map' 
+0

歡迎來到Stack Overflow。請閱讀「[mcve]」。您沒有輸入HTML的最小示例,它可以幫助我們幫助您。讓我們拼湊相同的HTML浪費了我們的時間,可以幫助其他人。你真的想把XML解析爲HTML嗎? –

回答

0

這不完全清楚自己想要什麼,但是這可能幫助。

默想這樣的:

require 'nokogiri' 

doc = Nokogiri::XML('<root><range><option>1</option><option>2</option></range></root>') 

doc.search('range option') # => [#<Nokogiri::XML::Element:0x3ffc64544e1c name="option" children=[#<Nokogiri::XML::Text:0x3ffc64544c3c "1">]>, #<Nokogiri::XML::Element:0x3ffc64544a5c name="option" children=[#<Nokogiri::XML::Text:0x3ffc6454487c "2">]>] 
doc.search('range option').map(&:to_xml) # => ["<option>1</option>", "<option>2</option>"] 

search會走的文檔,並且返回的選擇所有匹配的元素。 CSS range option查找包含<option>標記的所有<range>,並返回節點集中的<option>節點。從這一點開始,你可以摺疊,旋轉或切斷你心中的內容。

+0

當我說「元素名稱爲'範圍'」時,我的意思是一個元素具有名爲「name」的屬性等於「範圍」。那有意義嗎? – Dave

+0

需要將這些信息添加到您的問題中,就像您最初在那裏寫入信息一樣。不要在文本中使用「編輯」或「更新」標籤,因爲我們可以知道如果我們想知道更改的內容。展示您所談論內容的最小HTML示例比描述它更有意義;一張圖片勝過千言萬語。 –