Re: [xml] xmlCopyNode that doesn't copy a namespace?



Hi,

Von: "Theodore H. Smith" <delete elfdata com>
Datum: Fri, 30 Dec 2005 15:10:08 +0000

Hi people,

[...]

So, I got this problem with xmlCopyNode, it's putting a namespace  
into the XML, when I don't actually want one there.

before I had this:

<metadata>
     <schema>ADL SCORM</schema>
     <schemaversion>CAM 1.3</schemaversion>
</metadata>

then I end up with this:

<metadata xmlns="http://www.imsglobal.org/xsd/imscp_v1p1";>
     <schema>ADL SCORM</schema>
     <schemaversion>CAM 1.3</schemaversion>
</metadata>

Is there some way to disable this behaviour?

I don't think there's a public function in Libxml2 which does
what you want.
What I currently use to avoid creation of namespace declarations
is the following:
- Walk the tree to be copied on your side.
- Build the resulting tree-copy on your side.
- Use xmlDocCopyNode() with an @extended argument of 0. Doing this
  will only copy the rudimental element node; i.e. no ns-decls, no
  children and no attributes.
- Copy the already existent ns-decls on your side.
- Copy attribute nodes on your side.
- Finally use xmlDOMWrapReconcileNamespaces() to ensure that
  node->ns entries point to in-scope ns-decls.

Actually a public version of xmlStaticCopyNode() would do the
job you want if you have a @parent argument at hand. It would
search the ns-decls of the destination tree as well, thus would
avoid creation of redundant ns-decls.
Does anyone see problems wrt adding a public wrapper for
xmlStaticCopyNode() which also takes a @parent argument?

However, in the long term I would like to add a function
similar to xmlDOMWrapAdoptNode(), which does a copy of the
tree and provides customizable handling of ns-references.

Regards,

Kasimier



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