ruby – 如何使用Nokogiri替换XML节点内容
发布时间:2020-12-17 03:24:19 所属栏目:百科 来源:网络整理
导读:我正在使用 Ruby来读取XML文档并使用新值更新单个节点(如果存在). http://www.nokogiri.org/tutorials/modifying_an_html_xml_document.html 对我来说如何更改节点数据并不明显,更不用说如何将其保存回文件. def ammend_parent_xml(folder,target_file,new_f
我正在使用
Ruby来读取XML文档并使用新值更新单个节点(如果存在).
http://www.nokogiri.org/tutorials/modifying_an_html_xml_document.html def ammend_parent_xml(folder,target_file,new_file) # open parent XML file that contains file reference get_xml_files = Dir.glob("#{@target_folder}/#{folder}/*.xml").sort.select {|f| !File.directory? f} get_xml_files.each { |xml| f = File.open(xml) # Use Nokgiri to read the file into an XML object doc = Nokogiri::XML(f) filename = doc.xpath('//Route//To//Node//FileName') filename.each_with_index { |fl,i| if target_file == fl.text # we found the file,now rename it to new_file # ??????? end } } end 这是一些示例XML: <?xml version="1.0" encoding="utf-8"> <my_id>123</my_id> <Route> <To> <Node> <Filename>file1.txt</Filename> <Filename>file2.mp3</Filename> <Filename>file3.doc</Filename> <Filename>file4.php</Filename> <Filename>file5.jpg</Filename> </Node> </To> </Route> </xml> 我想将“file3.doc”更改为“file3_new.html”. 我打电话给: def ammend_parent_xml("folder_location","file3.doc","file3_new.html") 解决方法def amend_parent_xml(folder,new_file) Dir["#{@target_folder}/#{folder}/*.xml"] .sort.select{|f| !File.directory? f } .each do |xml_file| doc = Nokogiri.XML( File.read(xml_file) ) if file = doc.at("//Route//To//Node//Filename[.='#{target_file}']") file.content = new_file # set the text of the node File.open(xml_file,'w'){ |f| f<<doc } break end end end 改进: >使用File.read而不是File.open,这样就不会打开文件句柄. >或者你可以找到所有文件,然后如果file = files.find {| f | f.text == target_file} >显示如何将Nokogiri :: XML :: Document序列化回磁盘.>一旦找到匹配的XML文件,就不会处理文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |