用Nokogiri :: XML :: Builder忽略空节点的最干净方法是什么

编程入门 行业动态 更新时间:2024-10-09 13:23:29
本文介绍了用Nokogiri :: XML :: Builder忽略空节点的最干净方法是什么的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

因此,假设我有一个类似于以下内容的构建器模板:

So let's say I have a builder template like the following:

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml| xml.environment do |environment| environment.title title environment.feed feed environment.status status environment.description description # many many more end end builder.to_xml

如果 feed 和描述为 nil ,则可能输出:

If feed and description were nil, it could output:

<?xml version="1.0" encoding="UTF-8"?> <environment> <title>title</title> <feed/> <status>status</status> <description/> </environment>

我宁愿它完全忽略指甲。 实现此目标的最佳方法是什么?

I'd rather it ignored the nils altogether. What's the best way of achieving this?

所需的输出:

<?xml version="1.0" encoding="UTF-8"?> <environment> <title>title</title> <status>status</status> </environment>

当前解决方案:

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml| xml.environment do |environment| environment.title title if title environment.feed feed if feed environment.status status if status environment.description description if description # many many more end end builder.to_xml

是否有更清洁的方法?

Is there a cleaner way?

这对Builder#initialize有用吗?

Would this be a useful option on Builder#initialize?

builder = Nokogiri :: XML :: Builder.new(:encoding =>'UTF-8',:empty_nodes => false)

推荐答案

这取决于您实际上拥有多少个字段,,但我的建议是,您已经通过手动输入每个字段来犯错。

It depends how many fields you really have, but my suggestion is that you're already making a mistake by manually typing in each one.

如果顺序无关紧要,只需使用哈希即可。 (否则使用OrderedHash)

If order doesn't matter, just use a hash. (otherwise use an OrderedHash)

fields = { :title => title, :feed => feed, :status => status, :description => description, # many more } builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml| xml.environment do |environment| fields.each do |field_name, field_value| if field_value environment.send(field_name, field_value) end end end end builder.to_xml

似乎可以正常工作。

虽然不漂亮,但至少您只需要在一个地方定义字段和值即可。 最好是对象方法吗?

It's not pretty, but at least you just have to define your fields and values in one place. Preferably an object method?

更多推荐

用Nokogiri :: XML :: Builder忽略空节点的最干净方法是什么

本文发布于:2023-10-19 17:42:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1508287.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:节点   干净   方法   Nokogiri   XML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!