【发布时间】:2015-11-04 14:10:04
【问题描述】:
当我尝试使用 Nokogiri::XML::Builder 创建 XML 文档时:
builder = Nokogiri::XML::Builder.new do |xml|
xml.my_tag({key: :value})
end
我得到以下 XML 标记:
<my_tag key="value"/>
它是自封闭的,但我需要完整的形式:
<my_tag key="value"></my_tag>
当我在节点(甚至是空格)内传递一个值时:
xml.my_tag("content", key: :value)
xml.my_tag(" ", key: :value)
它会生成完整的标签:
<my_tag key="value">content</my_tag>
<my_tag key="value"> </my_tag>
但如果我传递一个空字符串或nil,甚至是一个空块:
xml.my_tag("", key: :value)
它会生成一个自闭合标签:
<my_tag key="value"/>
我相信应该有一些属性或其他东西可以帮助我,但简单的谷歌搜索没有找到答案。
我在“Building blank XML tags with Nokogiri?”中找到了一个可能的解决方案,但它会将所有标签保存为非自闭。
【问题讨论】:
-
根据规范,
<foo />与<foo></foo>相同,唯一的区别是更短更干净。为什么一定要有第二种形式?是要求还是愿望?由于 XML 文件可能很大,因此当您处理数百万行时,能够使用较短的格式会导致文件更小。 -
正如我在下面回答的,原因在于 API。它需要完整的标签符号