2011-12-29 60 views
0

使用下列格式写入XML文件中的条目的方法的Xml使用节点

def write_entry(entry) 
    node = Nokogiri::XML::Node.new("url", @xml_document) 
    node["loc"]= entry[:url] 
    node["lastmod"]= entry[:lastmod].to_s 
    node["changefreq"] = entry[:frequency].to_s 
    node["priority"] = entry[:priority].to_s 
    node.to_xml 
end 

的入口看起来是这样的:

<urlset> 
    <url loc="http:`enter code here`//www.experteer.co.uk/vacaturebank/banen/vacatures/xing-ag" lastmod="2011-11-23 16:58:27 UTC" changefreq="0.8" priority="monthly"/> 
</urlset> 

我想XML的条目是这样

<urlset> 
    <url> 
    <loc> http://www.experteer.co.uk/vacaturebank/banen/vacatures/xing-ag </loc> 
    <lastmod> 2011-11-23 16:58:27 UTC </lastmod> 
    <changefreq> 0.8 </changefreq> 
    <priority> monthly </priority> 
    </url> 
</urlset> 

使用Node或者我必须使用Builder可能吗? 如果可能的话用Node然后怎么样? 如果我必须使用Builder,它会为每个条目写入标题,我如何处理它不为每个条目写入标题。

+0

看看http://stackoverflow.com/questions/3910457/ruby-modify-an-xml-file-in-one-pass – 2011-12-29 12:04:10

+0

这是不同的东西,即时寻找:( – wearybands 2011-12-29 12:22:44

回答

0

您可以使用<<add_child将子节点添加到节点。

def write_entry(entry) 
    url = Nokogiri::XML::Node.new("url" , @xml_document) 
    %w{loc lastmod changefreq priority}.each do |node| 
    url << Nokogiri::XML::Node.new(node, @xml_document).tap do |n| 
       n.content = entry[ node.to_sym ] 
      end 
    end 
    url.to_xml 
end 

为了这个正常工作,你必须改变entry[:url]entry[:loc]。和entry[:frequency]entry[:changefreq],这不应该是一件坏事(最好在所有地方都有相同的名称,不是吗?)。

或者,如果您的entry散列仅包含需要转换为xml的内容,请使用entry.each do |key,value|而不是数组。

+0

你很棒:)非常感谢 – wearybands 2011-12-29 14:58:06