ruby学习记录——创建XML(遍历Wx:TreeCtrl)
RubyGems是一个库和程序的标准化打包以及安装框架,使得定位、安装、升级和卸载ruby包变得容易。使用builder来创建xml比用REXml简单便捷,首先是安装builder,“运行——gem install builder",
然后就可以使用了。不过这个方法从TreeCtrl中导出节点到xml中,节点名称固定,如
代码
require 'builder'
Document.new("<a><b/></a>").serialize( tr )
x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
#":target =>$stdout"参数:指示输出内容将被写向标准输出控制台
#":indent =>1"参数:XML输出形式将被缩进一个空格字符x.instruct! :xml,:version =>'1.1',:encoding => 'gb2312'
x.comment! "书本信息"
x.library("shelf" => "Recent Acquisitions") {
x.section("name" => "ruby"){
x.book("isbn" => "0672310001"){
x.title "Programming Ruby"
x.author "Yukihiro "
x.description "Programming Ruby - The Pragmatic Programmer's Guide"
}
}
}
Document.new("<a><b/></a>").serialize( tr )
x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
#":target =>$stdout"参数:指示输出内容将被写向标准输出控制台
#":indent =>1"参数:XML输出形式将被缩进一个空格字符x.instruct! :xml,:version =>'1.1',:encoding => 'gb2312'
x.comment! "书本信息"
x.library("shelf" => "Recent Acquisitions") {
x.section("name" => "ruby"){
x.book("isbn" => "0672310001"){
x.title "Programming Ruby"
x.author "Yukihiro "
x.description "Programming Ruby - The Pragmatic Programmer's Guide"
}
}
}
这里的library就不能修改了,无法满足我的需要,最后还是用rexml/document中的方法添加。
根据Wx:TreeCtrl的特点,因为没有找到 Wx:TreeCtrl# get_next_child方法,遍历树递归算法改了下
先传入tree的根节点id和xml根节点。
代码
def creatTreeXml(element,parent = nil)
if element.kind_of?(REXML::Element)
itemdata = SaveStruct.new(element.attributes.get_attribute("id").value.to_s,
element.attributes.get_attribute("name").value.to_s,
element.attributes.get_attribute("type").value.to_s)
croot = @myTree.append_item(parent,itemdata.name.to_s,-1,-1,itemdata)
if element.elements != nil
for cellelement in element.elements
creatTreeXml(cellelement,croot)
end
end
end
end
if element.kind_of?(REXML::Element)
itemdata = SaveStruct.new(element.attributes.get_attribute("id").value.to_s,
element.attributes.get_attribute("name").value.to_s,
element.attributes.get_attribute("type").value.to_s)
croot = @myTree.append_item(parent,itemdata.name.to_s,-1,-1,itemdata)
if element.elements != nil
for cellelement in element.elements
creatTreeXml(cellelement,croot)
end
end
end
end