关于rexml几个问题,麻烦大神指点迷津
ruby吧
全部回复
仅看楼主
level 1
长枪铁骑 楼主
之前没有使用过ruby,最新想用ruby做个脚本实现,
处理下xml文件,从网上看到可以用rexml库实现,
试着做一下操作,发现有几个问题,麻烦各位高手指点一下,THKS~
1、doc = REXML::Document(File.new("file.xml","r+"))
doc.write
发现有个问题,file.xml中双引号“”,在doc.write的结果中,都变成了单引号‘’;
2、获取的节点属性的顺序,变化了,假设原先的xml节点如下:
<root name="aa" des_cn=“根节点” id = "0" />
doc.write的结果就成了
<root des_cn=“根节点” id = "0" name="aa"/>
属性的顺序成了按照第一个字母排列的顺序了,不知道能不能实现按照原来的顺序排列。
不胜感激~
2015年08月20日 13点08分 1
level 12
第一个问题,是从网络上搜到的解答:
就是要定义:
doc.context[:attribute_quote] = :quote
以下是测试没加上面这一行及有加这一行的过程:
$ irb
>> require 'rexml/document'
=> true
>> doc=REXML::Document.new
=> <UNDEFINED/>
>> doc.context[:attribute_quote]
=> nil
>> root=doc.add_element('root')
=> <root/>
>> root.add_attribute('val','123')
=> "123"
>> doc.write(STDOUT)
<root val='123'/>=> [<?xml ... ?>, <root val='123'/>]
>>
$ irb
>> require 'rexml/document'
=> true
>> doc=REXML::Document.new
=> <UNDEFINED/>
>> doc.context[:attribute_quote] = :quote
=> :quote
>> root=doc.add_element('root')
=> <root/>
>> root.add_attribute('val','123')
=> "123"
>> doc.write(STDOUT)
<root val="123"/>=> [<?xml ... ?>, <root val="123"/>]
第二个问题,可能没办法,
属性顺序不同,对一般XML的节点而言是无所谓的。
如果是你要用 array 去存那属性的话,
可能就是你想要属性有一定的顺序;
但如果你是用 hash 去存那些属性的话,
节点顺序是不重要的。
2015年08月21日 02点08分 2
第一个问题我试了下,确实可以,能告诉我你是怎么搜索到的吗? 第二个问题主要是我现在是要修改xml文件的一些信息,使用rexml处理后写入到另一个文件中,节点的属性顺序变了,不利于阅读和与别人分享。 最后,再一次感谢大神的指点[呵呵]~
2015年08月21日 11点08分
level 12
rexml也只是曾用过,
但后来多用Nokogiri这个gem来处理XML或html。
我是用谷哥查一下 rexml quotes 第一笔就是:
http://stackoverflow.com/questions/3927507/ruby-convert-single-quotes-to-double-quotes-in-xml
只要没被墙的话,一有问题先问一下谷哥,大概就有答案了。
如果属性都是固定或所预期的,
读到hash的key就不须依顺序,
只要在puts、或印出结果时,
就能一个一个指定hash的key排出利於阅读的顺序。
如果属性的name是无法预期的话,
才较需要用array来保持其顺序。
2015年08月22日 01点08分 3
1