gpt4 book ai didi

xml - REXML 保留属性顺序

转载 作者:数据小太阳 更新时间:2023-10-29 02:15:28 26 4
gpt4 key购买 nike

我尝试使用 REXML 生成这样的 XML

<root>
<add key='foo' value='bar'/>
</root>

但我得到的是(注意键/值顺序)

<root>
<add value='bar' key='foo'/>
</root>

代码:

require 'rexml/document'
include REXML

doc = Document.new
doc.add_element('root')
el = doc.root.add_element('add')
el.add_attribute('key', 'foo')
el.add_attribute('value', 'bar')
puts doc

我写没关系:

el.add_attribute('key', 'foo')
el.add_attribute('value', 'bar')

el.add_attribute('value', 'bar')
el.add_attribute('key', 'foo')

结果是一样的。看起来 REXML 使用一些字典来保存属性...

我可以强制执行所需的顺序:键/值吗?

最佳答案

在 XML 中,属性的顺序无关紧要。如果您有一段重要的 XML 处理代码,那么我认为该代码存在错误。

来自 XML 规范 here ,请注意以下短语:“请注意,开始标记或空元素标记中属性规范的顺序并不重要”。

在回答您是否可以执行某项命令的具体问题时,我不这么认为。我从来没有真正尝试过这样做(因为这是不必要的),但 REXML 人员似乎不太可能浪费时间来实现这样一个非特性:-)。由于键/值对存储为散列,因此它们的顺序可能是随机的(就您可以从键的字母顺序来看)。

当然,由于 Ruby 带有 REXML 的源代码,您可以(如果绝望)用您自己的版本(REXML2?)替换或扩充包含的副本。

因为你在做一个简单的放置,它可能使用了漂亮的格式化程序所以检查 src/rexml/formatters/pretty.rb 中的 write_element 代码的开始它执行“node.attributes.each_attribute do |attr|”——您可能会发现它就像在处理元素之前对列表进行排序一样简单。

您可能还想建议开发人员(请参阅 here 了解邮件列表或 here 了解错误报告和增强请求)他们在未来的版本中将此作为一个选项,但如果我是他们,我只会说这是不必要的。

关于xml - REXML 保留属性顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/574724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com