Tl; dr:如何在CDATA
中使用to_xml在某些标签中添加ActiveSupport::XmlMini
块而不添加新行?
从昨天开始,我坐下来,尝试在我的一个脚本中猴子ActiveSupport::XmlMini.to_tag(key, value, options)
补丁,为哈希中的某些配对创建CDATA
块。
它无需任何修改即可创建:
<external_tag>SOME_INTERNAL_THINGS</external_tag>
我设法制作了以以下内容结尾的猴子补丁:
<external_tag>
<![CDATA[SOME_INTERNAL_THINGS]]>
</external_tag>
现在的问题是,我真的很想强迫它在XML文件中仅使用一行。下面的代码是到目前为止我对to_tag(key, value, options)
所做的更改。
if (CDATA_TAGS.include?(key))
# We should change something here to avoid creation of additional new lines.
options[:builder].tag!(key, attributes) { options[:builder].cdata!(formatted_value) }
else
options[:builder].tag!(key, formatted_value, attributes)
end
因此理想情况下,最终版本应为:
<external_tag><![CDATA[SOME_INTERNAL_THINGS]]></external_tag>
自动取款机。对于此脚本,我使用ruby 2.3.7
和ActiveSupport 4.2.10
。
编辑(2018年7月6日星期五11:08): 我已经设法用Nokogiri在脚本中添加了另一个步骤来实现这一点,但是我仍然对是否有办法更改此猴子补丁感兴趣,因此它不会在一开始就在其中添加这些换行符仍然很感兴趣。