XML文件详解编程语言

安装XML Builder

gem install builder
class CatalogController < ApplicationController 
   def gen_xml 
     @xml = Builder::XmlMarkup.new 
     @catalogs=Catalog.find(:all) 
   end 
 end
在目录:views/catalog下新建一个gen_xml.rxml文件
@xml.instruct! :xml, :version=>"1.0"  
 @xml.catalogs{ 
 for catalog in @catalogs 
   @xml.catalog do 
     @xml.journal(catalog.journal) 
     @xml.publisher(catalog.publisher) 
     @xml.edition(catalog.edition)      
     @xml.title(catalog.title) 
     @xml.author(catalog.author) 
   end 
 end 
 }


def self.import_from_xml(file) 
   file_path = "#{RAILS_ROOT}/tmp/xml/"  #创建文件夹  
    if !File.exist?(file_path) 
      Dir.mkdir(file_path, 0777) 
    end 
    #临时文件命名,不能有非法字符,比如"()"因为在linux下文件名不支持"()"等特殊符号    
    file_name = "temp.xml" 
    begin 
      data_utf = file.read 
      File.open(file_path + file_name , 'wb') do |f| 
        f.write(data_utf) 
        f.close 
      end 
    ensure   
      file.close 
    end 
    messages = [] 
    doc = REXML::Document.new(data_utf)   # 生成一个XML操作对象 
    doc.root.each_element("//blog") do |n|    
      if check_id?(n.elements["id"].text)   # 判断id号是否在数据库中存在,若存在则更新,若不存在则新建 
        myblog = Myblog.find(n.elements["id"].text) 
      else 
        myblog = Myblog.new 
      end 
      myblog.title = n.elements["title"].text 
      myblog.content = n.elements["content"].text 
      myblog.user_id = n.elements["userid"].text 
      myblog.created_at = n.elements["created"].text 
      myblog.updated_at = n.elements["updated"].text 
      myblog.deleted_at = n.elements["deleted"].text 
      if !myblog.save 
          messages << "#{myblog.errors.full_messages}" 
      end 
    end 
    FileUtils.rm_rf(file_path) if File.exists?(file_path) 
    return messages 
  end
doc.root是根节点,doc.root.each_element("//blog")找出所有blog元素。 n.elements["id"].text取出该blog元素的id子元素。另外还有一些方法比较有用,has_attributes?元素是否有属性,has_elements?是否有子元素,attributes[""]取属性值,parent父元素等等。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13414.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论