我正在尝试使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
但是我在这里的某个地方出了问题。有人可以朝着正确的方向推动我吗?
答案 0 :(得分:3)
容易腻:
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一起使用的大多数方法。