IXMLDOMNodePtr GetAttributeNode(IXMLDOMNodePtr node, const _bstr_t& name) { if (node == NULL) return NULL; IXMLDOMNamedNodeMapPtr attributes = node->Getattributes(); if (attributes == NULL) return NULL; IXMLDOMNodePtr att = attributes->getNamedItem(name); return att; }
void ZXmlParser::GrabNodeInformation( IXMLDOMNodePtr pChild ) { if ( IsMSXML_Node( pChild ) == NODE_ELEMENT ) { // It's a node // Tag Update m_Tag.Format( "<%s>", (const char *)( pChild->nodeName ) ); m_Name = (const char *)( pChild->nodeName ); // TextField no significant value m_TextField.Empty( ); // Update Attribute List m_AttribNames.RemoveAll( ); m_AttribValues.RemoveAll( ); IXMLDOMNamedNodeMapPtr pAttribs = pChild->Getattributes( ); if ( pAttribs ) { long nAttriCnt = pAttribs->Getlength( ); // Iterate over the attributes for( int i=0; i<nAttriCnt; ++i ) { IXMLDOMNodePtr pAttrib = pAttribs->Getitem( i ); if ( pAttrib ) { CString cs = ( const char * ) pAttrib->GetnodeName( ); m_AttribNames.Add( cs ); _variant_t vVal = pAttrib->GetnodeValue ( ); cs = ( const char * ) _bstr_t( vVal ); m_AttribValues.Add( cs ); } } } } else if ( IsMSXML_Node( pChild ) == NODE_TEXT ) { // Tag is #TEXT# m_Tag.Empty( ); m_Tag = "<#TEXT#>"; m_Name.Empty( ); m_Name = "#TEXT#"; // TextField Update m_TextField = (const char *)( pChild->text ); // Update Attribute List have no means m_AttribNames.RemoveAll( ); m_AttribValues.RemoveAll( ); } else if ( IsMSXML_Node( pChild ) == NODE_CDATA_SECTION ) { // Tag is #CDATA# m_Tag.Empty( ); m_Tag = "<#CDATA#>"; m_Name.Empty( ); m_Name = "#CDATA#"; // TextField Update m_TextField = (const char *)( pChild->text ); // Update Attribute List have no means m_AttribNames.RemoveAll( ); m_AttribValues.RemoveAll( ); } else if ( IsMSXML_Node( pChild ) == NODE_PROCESSING_INSTRUCTION ) { // Do nothing here } return; }