ruby - 如何重命名节点属性

标签 ruby attributes nokogiri

我正在尝试使 XML API 更加友好。其中一部分是重命名名称。 到目前为止,我设法根据自己的喜好重命名了节点,但是,我不知道如何重命名节点属性。

XML:

<result>
  <rowset name="characters" key="characterID" columns="name,characterID,corporationName,corporationID,allianceID,allianceName,factionID,factionName">
    <row name="Sult Dizarra" characterID="93125548" corporationName="Dry Atomic Fusion" corporationID="98012663" allianceID="154104258" allianceName="Apocalypse Now." factionID="0" factionName=""/>
    <row name="Bingu Pondarra" characterID="93421113" corporationName="Realm of Echidna" corporationID="98349254" allianceID="0" allianceName="" factionID="0" factionName=""/>
    <row name="Janna 'Wabisuke' Cobb" characterID="93431793" corporationName="Super Sexy" corporationID="98383185" allianceID="0" allianceName="" factionID="0" factionName=""/>
  </rowset>
</result>

xml.traverse do |node|
  if node.kind_of?(Nokogiri::XML::Element)
    node.each do |child|
      child.keys.each do |key|
        key.name = rename_method(key.name)
      end
    end
  end
end

但是我在这个过程中的某个地方出错了。有人可以将我推向正确的方向吗?

最佳答案

简单易行:

require 'nokogiri'

doc = Nokogiri::XML('<root><node foo="foo" /></root>')
node = doc.at('node')
node['bar'] = node['foo']
node.delete('foo')
doc.to_xml # => "<?xml version=\"1.0\"?>\n<root>\n  <node bar=\"foo\"/>\n</root>\n"

核心内容:

node['bar'] = node['foo']
node.delete('foo')

可以简化为:

node['bar'] = node.delete('foo')

这一切都在 Nokogiri::XML::Node documentation 中.我建议花时间审查它,如 Node 和 NodeSet包含与 Nokogiri 一起使用的大部分方法。

关于ruby - 如何重命名节点属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37054695/

相关文章:

ruby-on-rails - Heroku rake 迁移

javascript - 重复项的两个总和问题 - 更惯用的 Javascript 解决方案

ruby-on-rails - 如何在Ruby on Rails中检查属性是否存在状态验证

ruby - 从 HTML 解析价格返回空白或没有值?

ruby-on-rails - Rails 首先排序希腊字符

ruby - 合并 ruby​​ 中的 csv 数据以获得唯一值的总计/总和

javascript - 在 less 中访问空属性

javascript - hasAttribute 与 hasOwnProperty

Ruby 提示 nokogiri libiconv.2.dylib

ruby-on-rails - 如何在Rails中使用Nokogiri从URL获得HTML正文?