如何用Nokogiri让空标签自动关闭?

我在ERB中创建了一个XML模板。 我在导出过程中用数据库中的数据填充它。

在某些情况下,有一个空值,在这种情况下,一个元素可能是空的,如下所示:

  

在这种情况下,接收导出的客户端希望将其转换为自闭合标记:

  

我正试图看看如何让Nokogiri这样做,但我还没有看到它。 有人知道如何使Nokogiri自动关闭空XML标签吗?

更新

正则表达式足以完成我上面指定的操作,但客户端现在还希望其子项全部为空的标记可以自动关闭。 所以这:

       

……也应该

  

我认为这需要使用Nokogiri。

搜索

 <([^>]+)>\s* 

并替换为

 <\1/> 

在Ruby中:

 result = subject.gsub(/<([^>]+)>\s*<\/\1>/, '<\1/>') 

说明:

 < # Match opening bracket ( # Match and remember... [^>]+ # One or more characters except > ) # End of capturing group > # Match closing bracket \s* # Match optional whitespace & newlines < # Match opening bracket / # Match / \1 # Match the contents of the opening tag > # Match closing bracket 

几个问题:

  1. 相同,所以为什么要担心这么小的细节呢? 如果它在语法上是重要的,因为两者之间的文本节点是"\n" ,那么在你的ERB模板中放置一个测试,检查那里的值,如果它没有初始化,则输出自闭标签? 请参阅“ 牦牛剃须 ”。
  2. 为何涉及Nokogiri? 您应该能够在ERB中生成正确的XML,因为您可以控制模板。

编辑 – Nokogiri的行为是不重写解析的XML,除非必须这样做。 我怀疑你必须删除有问题的节点,然后将其重新插入一个空节点,让Nokogiri输出你想要的东西。