2013-06-26 1 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

을 [노코 기리 (http://nokogiri.org) 대신'문서 = Nokogiri.XML (XML); puts 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 }