I'm trying to figure out the fastest way to count the number of child elements of a Xerces C++ DOMNode object, as I'm trying to optimise the performance of a Windows application which uses the Xerces 2.6 DOMParser.
It seems most of the time is spent counting and accessing children. Our application needs to iterate every single node in the document to attach data to it using DOMNode::setUserData()
and we were initially using DOMNode::getChildNodes()
, DOMNodeList::getLength()
and DOMNodeList::item(int index)
to count and access children, but these are comparatively expensive operations.
A large performance improvement was observed when we used a different idiom of calling
DOMNode:: getFirstChild()
to get the first child node and invoke DOMNode::getNextSibling()
to either access a child at a specific index or count the number of siblings of the first child element to get a total child node count.
However, getNextSibling()
remains a bottleneck in our parsing step, so I'm wondering is there an even faster way to traverse and access child elements using Xerces.