2012-09-24 28 views
0
require 'xml/libxml' 
require 'libxml/document' 
$release_date 
doc=LibXML::XML::Parser.io(file.xml).parse 
doc.root.each_element('//ABCD/xyz/') do |elem| 
    elem.each_element do |node|    
     node.each_element do |child| 
      if child.content=="ABCD" 
       $release_date=node['date'] 
      else 
       if node['type']=="Original" 
        $release_date=node['date'] 
       end 
      end 
     end  
    end 
end 
puts "Release date : #{$release_date}" 

這是我已經寫提取根據從XML文件中的特定日期的代碼符合我的要求。我用的lib XML庫,但我得到了以下錯誤:庫的Xml紅寶石:錯誤`解析「:未定義的方法`讀」爲「file.xml」:字符串(NoMethodError)

`parse': undefined method `read' for "file.xml":String (NoMethodError) 
+1

'的libxml :: XML :: Parser.io(File.open( 「file.xml」)parse' –

+0

文件=文件。打開(「filename.xml」) doc = LibXML :: XML :: Parser.io(文件).parse仍然收到錯誤:'each_element':錯誤的參數數量(1爲0)(ArgumentError) – Aayush

+1

這是因爲'each_element '不接受任何參數:http://libxml.rubyforge.org/rdoc/classes/LibXML/XML/Node.html#M000252 –

回答

3

libxml documentation,解析文件:

LibXML::XML::Parser.file('file.xml').parse 

LibXML::Parser.io(File.open('file.xml')).parse 

此外,each_elementdoesn’t take any parameter。如果你想要做一個XPath查詢,看看find

require 'xml' 
doc = LibXML::XML::Parser.file("/tmp/test.xml").parse 
nodes = doc.find('//test') 
nodes.each do |n| 
    puts n.content 
end 
+0

在這一行中:doc.root.each_element('// ABCD/xyz /')abcd,xyz都是節點,那就是我需要遍歷的東西,那麼你能指導我如何遍歷?試過用find來給出錯誤。如果我像這樣工作root ='// ABCD/XYX /' doc.root.each_element()do | elem |我沒有得到任何錯誤,但它給了我下面的輸出(沒有日期打印):發佈日期: – Aayush

+0

@Aayush我已經更新了我的答案舉一個例子 - 正如我所說的,一切都在文檔中。關於你的其他問題,請確保你沒有斜線。做'doc.find(「// ABCD/XYZ」)' –

+0

非常感謝:)\ – Aayush

相關問題