REXML保留属性顺序

我尝试使用RE XML生成这样的 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','bar')

要么

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

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

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

解决方法

在XML中,属性的顺序并不重要.如果你有一些XML处理代码,那么我会建议代码是错误的.

从XML规范here中,请注意短语:“请注意,start-tag或empty-element标记中的属性规范的顺序并不重要”.

在回答您关于是否可以执行某项订单的具体问题时,我不相信.我从来没有尝试过这样做(因为这是不必要的)但REXML人员似乎不太可能浪费时间实现这样的非功能:-).由于键/值对存储为散列,因此它们的顺序可能是随机的(据您可以从键的字母序列中看出).

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇