This is my working code def getCPU cmd="onevm show -x #{VMID}|tr -d '\n'|tr -d ' '" #remove newline and space, otherwise cannot read CDATA vm=`#{cmd}` doc=REXML::Document.new(vm).root $cpu=doc.elements['/VM/TEMPLATE/CPU'].text.strip end
On Tue, Nov 30, 2010 at 5:35 PM, Shi Jin <jinzish...@gmail.com> wrote: > I got it. Somehow if the output is > <CPU> > <![CDATA[2]]> > </CPU> > in multiple lines, it does not work. > > If it is just one line: > <CPU><![CDATA[2]]></CPU> > It works. > > But my opennebula-2.0.01 (git) outputs them in multiple lines. > I see an older version puts them in a single line. Maybe this is why hector > gets his to work. > So the questions are: > 1. can we put them back to a single line? > 2. Shall we still be able to parse XML CDATA on multiple lines? > > Thanks. > Shi > > On Tue, Nov 30, 2010 at 5:30 PM, Shi Jin <jinzish...@gmail.com> wrote: > >> Really? I am confused. >> Can you run the following code and see if your output is the same as mine? >> [cloudad...@rhel6-one2 cgroups]$ cat test >> #!/usr/bin/ruby >> require 'rexml/document' >> vmcdata=<<XML >> <CPU> >> <![CDATA[2]]> >> </CPU> >> XML >> >> doc=REXML::Document.new(vmcdata).root >> puts doc >> puts doc.text >> >> vmold=<<XML >> <CPU> >> 2 >> </CPU> >> XML >> >> docold=REXML::Document.new(vmold).root >> puts docold >> puts docold.text >> [cloudad...@rhel6-one2 cgroups]$ ./test >> <CPU> >> <![CDATA[2]]> >> </CPU> >> >> >> <CPU> >> 2 >> </CPU> >> >> 2 >> [cloudad...@rhel6-one2 cgroups]$ ruby --version >> ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux] >> >> >> Thanks. >> >> Shi >> >> On Tue, Nov 30, 2010 at 5:18 PM, hector <hec...@convivencial.org> wrote: >> >>> CDATA labels are ignored by REXML so you shouldn't worry about them. >>> It's like they're not there. >>> >>> Im testing your example and it simply works. Perhaps you can give some >>> more input on the problem? As I say, it shoudln't be CDATA related if >>> working with REXML. >>> >>> Héctor >>> >>> >>> El 01/12/10 01:07, Shi Jin escribió: >>> > Hi there, >>> > >>> > I used to have some ruby script to parse the output of "onevm show >>> <vmid> -x". After switching from 1.4 to 2.0, they no longer work. I think >>> the problem is that now the output of the XML has lots of CDATA in it. For >>> example >>> > <CPU><![CDATA[2]]></CPU> >>> > which used to be just >>> > <CPU><2></CPU> >>> > >>> > I am not a Ruby expert. Is there any easy way to parse the XML in Ruby >>> to get the CDATA data? My code looks like >>> > def getCPU >>> > vm=`onevm show #{VMID} -x` >>> > doc=REXML::Document.new(vm).root >>> > $cpu=doc.elements['/VM/TEMPLATE/CPU'].text.strip >>> > end >>> > >>> > Thanks a lot. >>> > >>> > Shi >>> > >>> > -- >>> > Shi Jin, PhD >>> > >>> > >>> > >>> > _______________________________________________ >>> > Users mailing list >>> > Users@lists.opennebula.org >>> > http://lists.opennebula.org/listinfo.cgi/users-opennebula.org >>> > >>> >>> >>> -- >>> Hector >>> _______________________________________________ >>> Users mailing list >>> Users@lists.opennebula.org >>> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org >>> >> >> >> >> -- >> Shi Jin, Ph.D. >> >> > > > -- > Shi Jin, Ph.D. > > -- Shi Jin, Ph.D.
_______________________________________________ Users mailing list Users@lists.opennebula.org http://lists.opennebula.org/listinfo.cgi/users-opennebula.org