[ http://nagoya.apache.org/jira/browse/XERCESC-1299?page=history ]
Michael Williams updated XERCESC-1299:
--------------------------------------
Attachment: xerces2.50Changes.zip
The zip zip file with the proper directory structure containing only the new
files and files that have changed.
> DOMNode - getChildNodes - wrote efficient list implementation
> -------------------------------------------------------------
>
> Key: XERCESC-1299
> URL: http://nagoya.apache.org/jira/browse/XERCESC-1299
> Project: Xerces-C++
> Type: Improvement
> Components: DOM
> Versions: 2.5.0
> Environment: VC7, Windows XP
> Reporter: Michael Williams
> Attachments: xerces2.50Changes.zip, xerces2.50Changes.zip
>
> Problem:
>
> The DOMNode in xerces has a method called getChildNodes, which returns a
> DOMNodeList of child elements. This DOMNodeList basically provides a thin
> wrapper for the internal linked list, and is not efficient when doing element
> traversals, and direct array-type lookups with the DOMNodeList.item call.
>
> Solution:
>
> The solution to this lies in creating a proper implementation of the xerces
> DomNodeList class. We will extend this class to implement the following
> method
>
> virtual DOMNode *itemByTagNameNS(XMLSize_t index, const XMLCh *namespaceURI,
> const XMLCh *localName) const {return 0;};
> Retrieve an item in a specific collection by index, tag name, and namespace
>
> virtual XMLSize_t getLengthByTagNameNS(const XMLCh *namespaceURI, const XMLCh
> *localName) const {return 0;};
> Get the length of a specific collection by index, tag name, and namespace
>
> virtual bool insertElementAtByTagNameNS(DOMNode *, XMLSize_t index);
> Insert an item into the list by index of the collection of elements with
> matching namespace URI and localname. Returns false if the index < 0 or
> greater than the number of elements of the appropriate type (namespace and
> element name match).
>
> virtual DOMNode *removeElementAtByTagNameNS(XMLSize_t index, const XMLCh
> *namespaceURI, const XMLCh *localName)
> Remove an element by index of the collection of elements with matching
> Namespace URI and localname. Returns the removed node upon success, or false
> if the index < 0 or greater than the number of elements of the appropriate
> type.
>
> virtual bool insertElementAt(DOMNode *, XMLSize_t index) = 0;
> Inserts an element into the list of child elements by index. Returns false
> if the index < 0 or greater than the number of child elements.
>
> virtual DOMNode *removeElementAt(XMLSize_t index) = 0;
> Remove an element by index of the collection of elements with matching
> Namespace URI and localname. Returns the removed node upon success, or false
> if the index < 0 or greater than the number of child elements.
>
> Comments regarding element navigation:
>
> All methods of navigating elements will probably yield about the same level
> of performance, and linked list navigation or array navigation can be mixed
> without any adverse performance effects.
>
> Comments regarding element deletion and insertion:
>
> Choose one of the following three methods for deleting and inserting children
> elements into an element, and for the same element, do not mix the methods.
> Otherwise performance will most likely suffer.
>
> 1. Inserting and deleting by linked list methods (original xerces methods)
> 2. Inserting and deleting into the vector of ALL children (not using
> namespace and nodename identifiers)
> 3. Inserting and deleting by NS and nodename.
>
> The reason is that because algorithms to insert or delete from a linked list
> can be very efficient, but then to try to find the element to be deleted in
> an array will yield slow performance, because there is no good way to know
> the array index of the element beforehand.
>
> Also, the algorithms to partition an elements children into a general child
> array, and arrays by namespace and element name, will not yield good
> performance if these two sets of arrays (partitioned and general) are both
> used in the same element for inserting and deleting elements.
>
>
--
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]