【问题标题】:howto get Builder to create <tag></tag> instead of <tag/>如何让 Builder 创建 <tag></tag> 而不是 <tag/>
【发布时间】:2010-11-24 11:40:32
【问题描述】:

我正在使用 Builder::XmlMarkup 创建 xml。我想创建一个没有内容的标签,因为 api 强制我创建它。 如果我使用博客

xml.tag do
end

我得到了我需要的东西

<tag></tag>

但我希望它更短

xml.mytag

这给了我

<mytag/>

但我想要

<mytag></mytag>

我必须通过什么选项。

问候凯

【问题讨论】:

  • 为什么要&lt;mytag&gt;&lt;/mytag&gt; 而不是&lt;mytag/&gt;?由于输出是 XML,下游应用程序不应该知道或关心其中的差异。

标签: ruby xml tags builder


【解决方案1】:

只需将空字符串作为参数传递。 xml.mytag('')

【讨论】:

  • 显然这不起作用(不再?)刚刚尝试过,Builder 显然正试图变得聪明并创建 &lt;tag/&gt; 代替
【解决方案2】:

为什么你想要&lt;mytag&gt;&lt;/mytag&gt;而不是&lt;mytag/&gt;?由于输出是 XML,下游应用程序不应该知道或关心其中的差异。

根据 Infoset 规范 (Appendix D point 7),“空元素的两种形式之间的区别:&lt;foo/&gt;&lt;foo&gt;&lt;/foo&gt;”未在 XML 信息集中表示。

这并不能回答您的“如何”问题,但如果您发现您实际上不需要做您想做的事情,它可能会让您免于艰难且不必要的追逐。

【讨论】:

  • 问题是,Datev(德国最大的会计系统供应商)强迫我这样做。我认为他们不会为我改变他们的 api ;)
  • @toy:明白。虽然它不会为 you 改变应用程序的行为...这可能是因为他们有一个错误,因此他们声称使用 XML,但实际上他们需要按照自己的方式格式化 XML。应该有人告诉他们。此外,它本身也不会改变他们的 API,除非他们的规范明确指出“不允许使用短形式的空元素(或意味着不同的东西)”。但我明白,现实情况是他们明天不会修复它!
【解决方案3】:

好的空字符串很好,另一种单行方式是我发现的空块。

xml.mytag{}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 2020-10-04
    • 2019-12-21
    相关资源
    最近更新 更多