如何重命名节点属性



我正在努力使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文档中。我建议花点时间复习一下,因为Node和NodeSet包含了Nokogiri使用的大多数方法。

最新更新