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>
|