[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [xml] Multiple CDATA blocks



On Thu, 2004-09-02 at 14:45 -0400, Daniel Veillard wrote:

> On Thu, Sep 02, 2004 at 06:35:07PM +0200, Philip Van Hoof wrote:
> > So basically, yea I know that you people are going to slaughter me using
> > an axe after tearing of my fingernails one by one and worst of all
> > really really going to hate me for using this older libraries.
> 
>   No it's even simpler than that, I don't want to hear about it.

Okay :-)

Since the older gnome-xml isn't parsing it correctly for me, I assume
that I can't do much about it.

So in stead of letting libxml-2 handle the situation of a "]]>" in my
CDATA-body by creating two such blocks, I decided to replace it with 

	"]]>"

> > Could it be that this is behaviour of libxml-2 when in my data, the
> > string "]]>" is found?

>   Yes that's the usual way to proceed, e.g.
>     http://www.w3.org/TR/xslt#section-XML-Output-Method
> see the paragraphs suggesting this.

For now I've created a small check-data for "]]>" at the writer side and
a "undo-that-check"-type of function at the reader-side:

At the writer-side I am lucky since I have it as a GString, which means
finding and replacing is trivial

So this replaces "]]>" to "]]>"

p = strstr (gstr->str, "]]>");
if (p != NULL)
{
   i = gstr->str - p; i = -i; i+=2;
   gstr = g_string_erase (gstr, i, 1);
   gstr = g_string_insert (gstr, i, ">");
}

At the reader-side, it's not a GString so I created this ugly thing
which replaces ">" with '>'.

r = strstr (s, ">");
if (r != NULL) 
{
    gint len = strlen (s) - 3;
    gchar *tmp=(gchar*)g_malloc0(sizeof (gchar) * len);
    *r='\0'; strcpy (tmp, s);
     *r++='>'; *r++='>'; *r++='>';
     *r='>'; strcat (tmp, r);
     g_free (s); s=tmp;
}

This solves my problem for now, nevertheless I am open for better
suggestions from the mailinglist of course. Lucky me we have all the
memory and cpu-power we want, I'd dislike using this for high-
performance situations :-\



Thanks for the very fast answer Daniel


-- 
Philip Van Hoof, Software Developer @ Cronos
home: me at freax dot org
gnome: pvanhoof at gnome dot org
work: Philip dot VanHoof at Cronos dot Be
http://www.freax.be, http://www.freax.eu.org



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]