Download Firefox: WindowsMac OS X
logo       
Google Custom Search
    AddThis Social Bookmark Button

Re: Namespace - Saving to a File: msg#00000

Subject: Re: Namespace - Saving to a File
Hi Chetan,

On Thursday, April 28, 2005, 6:48:44 PM, Chetan Raj wrote:
> When I create a document with a namespace and then save the
> document to a  file, then the namespace was not saved.

> Ex: [...]

> For the above code, the test.xml saved was this...

> <?xml version="1.0"?>
> <nm:chet/>

The code you wrote and the resulting xml file are correct wrt to the
current gdome implementation of gdome_di_createDocument.

> When I debugged, I found that libxml xmlNode has two xmlns pointers
>  xmlNs          *ns;        /* pointer to theassociated namespace */
>  xmlNs          *nsDef;     /* namespace definitions on this node */

> InxmlNewNode function, we were poulating only ns and not nsDef. 
> (file tree.c line n.o:  2139  ver: libxml2-2.6.11 )
cur->>ns = ns;

> and inxmlNodeDumpOutputInternal function we were checking for
> nsDef to savethe namespace data!!  ( file xmlsave.c, line n.o 743
> ver:libxml2-2.6.11 )
if (cur->>nsDef)
>         xmlNsListDumpOutput(buf, cur->nsDef);

libxml2 is correct. The namespace associated to a node is a different
thing from the namespace declared through the attribute xmlns on a
node.
The namespace you specify on the createDocument is the namespace
associated to the document element node, not the namespace declared on
it.
For example you can have a node with two different namespace
declarations but only one namespace associated with it:

<?xml version="1.0"?>
<pers:person xmlns:pers="http://sernaferna.com/pers";
             xmlns:html="http.//www.w3.org/1999/xhtml/">
...
</pers:person>

> When I modified tree.c in xmlNewNode function as shown
cur->>ns = ns;
cur->>nsDef = ns;  // Added this line to make namespace save to
cur->>file work. Before this Namespaces were not saving to a file.

> Then we were successfully able to save the Namespaces to the file. and the 
> output we got is
> <?xml version="1.0"?>
> <nm:chet xmlns:nm="http://www.w3.org/2000/svg"/>


> Is the fix I gave correct? Why do we have two xmlNs(ns and nsDef) pointers?

The fix is not correct because the two pointers refer correctly to two
different things.

> If you have any other suggesions to use and save namespaces, please reply to 
> me.

Using your example above you have to get the document element and add
to it the namespace declaration that you want to declare on that
element node:
...
GdomeElement* el = gdome_doc_documentElement(doc, &exc);
GdomeDOMString* attr_name = gdome_str_mkref("xmlns:nm");
gdome_el_setAttributeNS(el, attr_name, ns, &exc)
...

Bye,
  Paolo.
-- 
GPG key: 1024D/9C5AE886 2004-10-21 Paolo Casarini <paolo@xxxxxxxxxxxx>


<Prev in Thread] Current Thread [Next in Thread>