2013-06-26 33 views
0

我的代碼:Xpath.each不是在軌工作

require 'rexml/document' 
require 'xpath' 

doc = REXML::Document.new(xml) 
XPath.each(doc, "*/categoryName") { |element| puts element.text } 

我試圖把對象XML其中的XML是XML字符串...和檢索一些文本即 - 我想這個文本

我想上面的代碼將工作,但它給我以下錯誤:

undefined method `each' for XPath:Module 
+0

使用[引入nokogiri(http://nokogiri.org),而不是:'DOC = Nokogiri.XML(XML);將doc.xpath('*/categoryName')。map(&:text)'放入 – Phrogz

回答

0

我想你錯過require rexml/xpath和嘗試REXML::XPath.each。它會工作。

require 'rexml/document' 
require 'rexml/xpath' 
doc = REXML::Document.new(xml) 
REXML::XPath.each(doc, "*/category") { |element| puts element.text } 

一個例子:

require 'rexml/document' 
require 'rexml/xpath' 

doc = REXML::Document.new("<p>some text <b>this is bold!</b> more text</p>") 
REXML::XPath.each(doc, "*//b") { |element| puts element.text } 
# >> this is bold! 
1

我不知道你是什麼加載「的XPath」庫,但你不想要或需要它。令人困惑的是,REXML的文檔假定您已通過include REXML「污染」了全局對象。既然你不這樣做,你需要提供完整路徑模塊:

require 'rexml/document' 
doc = REXML::Document.new(xml) 
REXML::XPath.each(doc, "*/category"){ |el| puts el.text }