Recently, I needed to display XML files or XML representation of COM objects in a
After some web surfing, I didn't find any ActiveX Control ready to use.
So, I decided to develop this one. The ActiveX is based on the XML Apache SAX Parser, Xerces v1.4 (xml.apache.org).
It accepts local files,
memory buffers or URL's files as input sources. For big files, I needed to display only some
elements. So, instead of displaying DOM nodes on item expanding as Frank Ale do it in his article 'How to load a tree view with a large XML file',
I prefer filtering the XML input source by element's counters like
To incorporate this into your app, you just need to incorporate the XmlBrowser ActiveX in your project.
The ActiveX must be initialized by calling
Initialize and destroyed by calling
If your (C++) project is already linked with the Xerces library and already
you don't need to call the ActiveX methods.
As described in the
CXmlBRowser::Parse method, the ActiveX inverts the both counters.
Counters are deactivated when they are equals to -1.
if(m_nStartElement != -1 && m_nEndElement != -1
&& m_nEndElement < m_nStartElement)
const long nInverse = m_nStartElement;
m_nStartElement = m_nEndElement;
m_nEndElement = nInverse;
The tree items are built in the
creates a new child item,
endElement permits to retrieve the parent one.
void CBrowserHandler::startElement(const XMLCh* const name,
m_hCurrentRecord = TreeView_InsertItem(
void CBrowserHandler::endElement(const XMLCh* const name)
if(m_hCurrentRecord !=NULL && m_hCurrentRecord != TVI_ROOT)
m_hCurrentRecord = TreeView_GetParent(
Other parameters like
etc. are available.
For more information on these parameters, pleaser refer to the Xml Apache Group Documentation. Sources and documentation
can be downloaded on http://xml.apache.org site.
Please don't send emails but post here if you have any questions regarding this