http://www.perlmonks.org?node_id=482496


in reply to Accessing mixed content in XML

Your XML should be like this:
<function name="showImage"> <data>A random picture</data> <argument><![CDATA[<img src="test.jpg">]]></argument> <argument>0</argument> </function>
Now the perl code:
#!/usr/bin/env perl use strict; use warnings; use XML::Simple; use Data::Dumper; my $ref = XMLin(\*DATA); print Dumper $ref; __DATA__ <function name="showImage"> <data>A random picture</data> <argument><![CDATA[<img src="test.jpg">]]></argument> <argument>0</argument> </function>
The results:
$VAR1 = { 'argument' => [ '<img src="test.jpg">', '0' ], 'name' => 'showImage', 'data' => 'A random picture' };

You can read more about XML specs here or searching in Google.

Update:If you use XML::Simple to create the XML file, it will automagically convert ">" or "<" to &gt; and &lt;.


Igor S. Lopes - izut
surrender to perl. your code, your rules.

Replies are listed 'Best First'.
Re^2: Accessing mixed content in XML
by anthski (Scribe) on Aug 10, 2005 at 08:04 UTC
    Igor,

    Thanks very much for your well explained solution, example code and the links. I'll do some reading about XML.

    If I'd known about CDATA and XML::Simple supporting it, I'd have probably stuck with XML::Simple. For now, using > and < is working nicely with XML::DOM.

    Thanks again.

      Instead of XML::DOM you might want to have a look at XML::LibXML, which gives you a lot more than XML::DOM: XPath (very, VERY useful), RelaxNG, Xinclude, HTML parser, better performances... As it implements the DOM porting code from XML::DOM to XML::LibXML is also very easy (usually all you have to do is changing the names of a few constants).