[one-users] ONE-2.0 CDATA in XML output

Shi Jin jinzishuai at gmail.com
Tue Nov 30 21:25:16 PST 2010


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 <jinzishuai at 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 <jinzishuai at gmail.com> wrote:
>
>> Really? I am confused.
>> Can you run the following code and see if your output is the same as mine?
>> [cloudadmin at 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
>> [cloudadmin at rhel6-one2 cgroups]$ ./test
>> <CPU>
>>    <![CDATA[2]]>
>> </CPU>
>>
>>
>> <CPU>
>> 2
>> </CPU>
>>
>> 2
>> [cloudadmin at 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 <hector at 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 at lists.opennebula.org
>>> > http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
>>> >
>>>
>>>
>>> --
>>> Hector
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opennebula.org
>>> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
>>>
>>
>>
>>
>> --
>> Shi Jin, Ph.D.
>>
>>
>
>
> --
> Shi Jin, Ph.D.
>
>


-- 
Shi Jin, Ph.D.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opennebula.org/pipermail/users-opennebula.org/attachments/20101130/800efe1b/attachment.htm>


More information about the Users mailing list