You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "Alberto Massari (JIRA)" <xe...@xml.apache.org> on 2004/12/28 18:34:07 UTC

[jira] Resolved: (XERCESC-647) problem cloning DOMDocument

     [ http://nagoya.apache.org/jira/browse/XERCESC-647?page=history ]
     
Alberto Massari resolved XERCESC-647:
-------------------------------------

     Assign To:     (was: Xerces-C Developers Mailing List)
    Resolution: Fixed

A fix is in CVS. Please verify.

Alberto

> problem cloning DOMDocument
> ---------------------------
>
>          Key: XERCESC-647
>          URL: http://nagoya.apache.org/jira/browse/XERCESC-647
>      Project: Xerces-C++
>         Type: Bug
>   Components: DOM
>     Versions: 2.1.0
>  Environment: Operating System: All
> Platform: Other
>     Reporter: gareth reakes

>
> When cloning a DOMDocument we do not clone the elements that provide default
> attribute information. This causes 2 problems. First is that any elements that
> are then cloned do not get the default attributes because these are created in
> the constructors by asking the DOMDocument. Second is that deafult attributes do
> not get placed back on the elemtents when they are deleted.
> This was raised on the list and the feedback was positive for the change.
> Patch is for cvs
> Index: dom/impl/DOMDocumentImpl.cpp
> ===================================================================
> RCS file: /home/cvspublic/xml-xerces/c/src/xercesc/dom/impl/DOMDocumentImpl.cpp,v
> retrieving revision 1.26
> diff -u -r1.26 DOMDocumentImpl.cpp
> --- dom/impl/DOMDocumentImpl.cpp	27 Sep 2002 19:18:40 -0000	1.26
> +++ dom/impl/DOMDocumentImpl.cpp	2 Oct 2002 12:03:22 -0000
> @@ -971,7 +971,7 @@
>                  for(XMLSize_t i=0;i<srcattr->getLength();++i)
>                  {
>                      DOMAttr *attr = (DOMAttr *) srcattr->item(i);
> -                    if (attr -> getSpecified()) { // not a default attribute
> +                    if (attr -> getSpecified() || cloningDoc) { // not a
> default attribute or we are in the process of cloning the elements from inside a
> DOMDocumentType
>                          DOMAttr *nattr = (DOMAttr *) importNode(attr, true, false);
>                          if (attr -> getLocalName() == 0)
>                              newelement->setAttributeNode(nattr);
> @@ -1061,11 +1061,17 @@
>                      tmap->setNamedItem(importNode(smap->item(i), true, false));
>                  }
>              }
> -            // NOTE: At this time, the DOM definition of DocumentType
> -            // doesn't cover Elements and their Attributes. domimpl's
> -            // extentions in that area will not be preserved, even if
> -            // copying from domimpl to domimpl. We could special-case
> -            // that here. Arguably we should. Consider. ?????
> +            
> +            smap = ((DOMDocumentTypeImpl *)srcdoctype)->getElements();
> +            tmap = ((DOMDocumentTypeImpl *)newdoctype)->getElements();
> +            if (smap != 0) {
> +                for(XMLSize_t i = 0; i < smap->getLength(); i++) {
> +
> +                    //note the true setting for clone doc, this is so default
> attrs get copied accross in the next call to this method
> +                    tmap->setNamedItem(importNode(smap->item(i), true, true));
> +                }
> +            }
> +
>              newnode = newdoctype;
>          }
>          break;

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org