/****************************************************************************** Function Name : nParseTSFile Input(s) : CString omstrTSFile Output : INT Functionality : Load the omStrTSFille Member of : CTestSetupEntity Friend of : - Author(s) : Venkatanarayana Makam Date Created : 06/04/2011 Modifications : Codetag : CS002 ******************************************************************************/ INT CTestSetupEntity::nParseTSFile(CString omstrTSFile) { MSXML2::IXMLDOMDocumentPtr pIDOMDoc; HRESULT hr = pIDOMDoc.CreateInstance(L"Msxml2.DOMDocument"); if ( FAILED(hr) ) { throw "Unable to create XML parser object"; } if(PathFileExists(omstrTSFile) == FALSE) { return ERR_PATH_INCORRECT; } //Create A TestSetup DOM document CComVariant varFileName((LPCSTR)omstrTSFile); try { pIDOMDoc->load(varFileName); //GetTest Setup Title MSXML2::IXMLDOMNodePtr pIDOMTiltleNode; _bstr_t bstrNodeName = def_STR_TSNODE_NAME; CComVariant NodeValue; pIDOMTiltleNode = pIDOMDoc->selectSingleNode(bstrNodeName); MSXML2::IXMLDOMNamedNodeMapPtr pDOMTCAtrributes; pDOMTCAtrributes = pIDOMTiltleNode->Getattributes(); MSXML2::IXMLDOMNodePtr pIDOMChildNode; //bstrNodeName = def_STR_TSATTRIB_TITLE; bstrNodeName.Assign(SysAllocString(CT2W(def_STR_TSATTRIB_TITLE))); pIDOMChildNode = pDOMTCAtrributes->getNamedItem(bstrNodeName); pIDOMChildNode->get_nodeTypedValue(&NodeValue); m_omstrTestSetupTitle = strCopyBSTRToCString(NodeValue); pIDOMChildNode.Release(); //Get Description //bstrNodeName = def_STR_TSDESCRIPTION; bstrNodeName.Assign(SysAllocString(CT2W(def_STR_TSDESCRIPTION))); MSXML2::IXMLDOMNodePtr pIDOMDescriptionNode = pIDOMDoc->selectSingleNode(bstrNodeName); pIDOMDescriptionNode->get_nodeTypedValue(&NodeValue); m_omstrDescription = strCopyBSTRToCString(NodeValue); //Get Header Node //bstrNodeName = def_STR_TSHEADER; bstrNodeName.Assign(SysAllocString(CT2W(def_STR_TSHEADER))); MSXML2::IXMLDOMNodePtr pIDOMHeaderNode = pIDOMDoc->selectSingleNode(bstrNodeName); nLoadHeader(pIDOMHeaderNode); pIDOMHeaderNode.Release(); //Get TestCases List //bstrNodeName = def_STR_TSTCLIST; bstrNodeName.Assign(SysAllocString(CT2W(def_STR_TSTCLIST))); MSXML2::IXMLDOMNodePtr pIDOMTSNode = pIDOMDoc->selectSingleNode(bstrNodeName); GetData(pIDOMTSNode); } catch(...) { return S_FALSE; } return S_OK; }
void readVerticesNormalsTexcoords(MSXML2::IXMLDOMNodePtr mesh, geometry_t &geometry) { MSXML2::IXMLDOMNodeListPtr sourceList = mesh->selectNodes("r:source"); vector<float> vertices; vector<float> normals; vector<float> texcoords; for (int i = 0; i < sourceList->length; i++) { MSXML2::IXMLDOMNodePtr source = sourceList->Getitem(i); MSXML2::IXMLDOMNamedNodeMapPtr attributes = source->attributes; for (int j = 0; j < attributes->length; j++) { _bstr_t attributeName = attributes->getNamedItem("id")->text; if (wcsstr(_wcslwr(attributeName), L"position")) { geometry.vertices = readArray<float>(source); } else if (wcsstr(_wcslwr(attributeName), L"normal")) { geometry.normals = readArray<float>(source); } else if (wcsstr(_wcslwr(attributeName), L"map") || // belnder wcsstr(_wcslwr(attributeName), L"-uv")) // 3dsmax { geometry.texcoords = readArray<float>(source); } } } }
BOOL WXmlParse::readExtendModName(std::vector<std::pair<string, string> > &modNames) { MSXML2::IXMLDOMDocumentPtr doc; MSXML2::IXMLDOMElementPtr docRoot; MSXML2::IXMLDOMElementPtr docElement; MSXML2::IXMLDOMNodeListPtr elementNodes; MSXML2::IXMLDOMNamedNodeMapPtr elementAttributes; MSXML2::IXMLDOMNodePtr xmlNode; MSXML2::IXMLDOMNodePtr xmlSubNode; MSXML2::IXMLDOMNodePtr xmlAttrNode; doc.CreateInstance(__uuidof(DOMDocument30)); doc->load((_variant_t)m_strFileName); docRoot = doc->GetdocumentElement();//获得根节点; docRoot->get_childNodes(&elementNodes); LONG length, subLength, attrLength; elementNodes->get_length(&length); MSXML2::IXMLDOMNodeListPtr subElementNodes; // 3 : 扩展模块列表 elementNodes->get_item(1, &xmlNode); xmlNode->get_childNodes(&subElementNodes); subElementNodes->get_length(&subLength); for (int j = 0; j < subLength;j++) { subElementNodes->get_item(j, &xmlSubNode);//获得某个属性 xmlSubNode->get_attributes(&elementAttributes); MSXML2::IXMLDOMNodePtr nameNode = elementAttributes->getNamedItem("name"); MSXML2::IXMLDOMNodePtr descNode = elementAttributes->getNamedItem("description"); modNames.push_back(std::make_pair(nameNode->text, descNode->text)); } return TRUE; }
/****************************************************************************** Function Name : GetData Input(s) : Output : HRESULT Functionality : Member of : CVerifyResponse Friend of : - Author(s) : Venkatanarayana Makam Date Created : 06/04/2011 Modifications : ******************************************************************************/ HRESULT CVerifyResponse::GetData(MSXML2::IXMLDOMNodePtr& pIDomNode) { CVerifyEntity::GetData(pIDomNode); _bstr_t bstrNodeName = def_STR_VERIFYMSG_NODE; CComVariant NodeValue; MSXML2::IXMLDOMNamedNodeMapPtr pDOMVerifyAtrributes; MSXML2::IXMLDOMNodePtr pIDOMChildNode; pDOMVerifyAtrributes = pIDomNode->Getattributes(); //bstrNodeName = def_STR_ATTRIB_WAITFOR; bstrNodeName.Assign(SysAllocString(CT2W(def_STR_ATTRIB_WAITFOR))); pIDOMChildNode = pDOMVerifyAtrributes->getNamedItem(bstrNodeName); pIDOMChildNode->get_nodeTypedValue(&NodeValue); CString strTemp; strTemp = strCopyBSTRToCString(NodeValue); //W4 Removal m_ushDuration = (USHORT)atoi((LPCSTR)strTemp); INT nCount = (INT)m_ouData.m_odVerify_MessageEntityList.GetCount(); for(int i = 0; i < nCount; i++) { CVerify_MessageData ouVerifyData; POSITION pos = m_ouData.m_odVerify_MessageEntityList.FindIndex(i); CVerify_MessageEntity& ouVerifyEntity = m_ouData.m_odVerify_MessageEntityList.GetAt(pos); ouVerifyEntity.GetEntityData(VERIFY_MESSAGE, &ouVerifyData); m_ouVerifyMsgMap[ouVerifyData.m_dwMessageID] = ouVerifyData; } return S_OK; }
//////////////////////////////////////////////////////////////////////////// // Helper function: Walk all the Elements at a particular node //////////////////////////////////////////////////////////////////////////// HRESULT CXMLDocument::WalkTree(int iLevel, MSXML2::IXMLDOMNode* pNode) { HRESULT hr = S_OK; CComBSTR bstrNodeName; pNode->get_nodeName(&bstrNodeName); CComVariant vNodeValue; pNode->get_nodeValue(&vNodeValue); vNodeValue.ChangeType(VT_BSTR); CString strValueString = V_BSTR(&vNodeValue); if (m_pCallbackFunction) m_pCallbackFunction(iLevel, CString(bstrNodeName), (LPCSTR)NULL, strValueString, m_pCallbackParam); MSXML2::IXMLDOMNamedNodeMapPtr pAttributes = NULL; if (SUCCEEDED(pNode->get_attributes(&pAttributes)) && (pAttributes != NULL)) { MSXML2::IXMLDOMNodePtr pAttribute = NULL; pAttributes->nextNode(&pAttribute); bool bRetVal = true; while (pAttribute) { CComBSTR bstrAttribName; pAttribute->get_nodeName(&bstrAttribName); CComVariant vNodeValue; pAttribute->get_nodeValue(&vNodeValue); vNodeValue.ChangeType(VT_BSTR); CString strValueString = V_BSTR(&vNodeValue); if (m_pCallbackFunction) bRetVal = m_pCallbackFunction(iLevel+1, CString(bstrNodeName), CString(bstrAttribName), strValueString, m_pCallbackParam); if (!bRetVal) { // set complete error message with node name and all attribute values m_strErrorNode = bstrNodeName; return S_FALSE; } pAttributes->nextNode(&pAttribute); } } MSXML2::IXMLDOMNodePtr pChild = NULL; pNode->get_firstChild(&pChild); while (pChild) { if (WalkTree(iLevel+1, pChild) != S_OK) return S_FALSE; MSXML2::IXMLDOMNode* pNext = NULL; pChild->get_nextSibling(&pNext); pChild = pNext; } return S_OK; }
bool hodeHasAttribute(MSXML2::IXMLDOMNodePtr& node, const String& attributeName, const String attributeNameSpace) { MSXML2::IXMLDOMNamedNodeMapPtr attributes = node->Getattributes(); MSXML2::IXMLDOMNodePtr res = attributes->getQualifiedItem(attributeName.c_str(), attributeNameSpace.c_str()); return res != NULL; }
CStdString SmartTagParser::GetNamespacePrefix() { if (m_spXMLDom == NULL) { CStdString msg; msg.Format(_T("SmartTagParser::GetNamespacePrefix - The XML document pointer is null.")); throw Workshare::NullReferenceException(msg); } MSXML2::IXMLDOMElementPtr spElement = m_spXMLDom->firstChild; if (spElement == NULL) { CStdString msg; msg.Format(_T("SmartTagParser::GetNamespacePrefix - Failed to get the first node of the document.")); throw Workshare::Exception(msg); } MSXML2::IXMLDOMNamedNodeMapPtr spAttributes = spElement->attributes; if (spAttributes == NULL) { spElement.Release(); CStdString msg; msg.Format(_T("SmartTagParser::GetNamespacePrefix - Failed to get attributes of the first child of the document.")); throw Workshare::Exception(msg); } MSXML2::IXMLDOMAttributePtr spAttribute = spAttributes->item[0]; if (spAttribute == NULL) { spElement.Release(); spAttributes.Release(); CStdString msg; msg.Format(_T("SmartTagParser::GetNamespacePrefix - Failed to get attributes of the first child of the document.")); throw Workshare::Exception(msg); } CStdString sFullNamespace = spAttribute->xml; HRESULT hr = m_spXMLDom->raw_setProperty(_T("SelectionNamespaces"), _variant_t(sFullNamespace.c_str())); if (FAILED(hr)) { CStdString message; message.Format(_T("SmartTagParser::SmartTagParser - Failed to set namespace : %s."), sFullNamespace.c_str()); throw Workshare::Com::ComException(message.c_str(), hr, m_spXMLDom); } int iPosStart = sFullNamespace.Find(_T(":")); int iPosEnd = sFullNamespace.Find(_T("=")); CStdString sPrefix = sFullNamespace.Mid(iPosStart+1, iPosEnd - (iPosStart+1)); spElement.Release(); spAttributes.Release(); spAttribute.Release(); return sPrefix; }
int CXmlBase::GetAttrsOfNode(map<CString, CComBSTR>& mapAttrs, MSXML2::IXMLDOMNodePtr pNode) { MSXML2::IXMLDOMNamedNodeMapPtr pAttrs; MSXML2::IXMLDOMNodePtr pAttr; HRESULT hr; CComBSTR bstrText; CString str; long lAttrCount = 0; mapAttrs.clear(); if (NULL == pNode) { //WRITELOG("END, pNode为空"); return 0; } pAttrs = pNode->Getattributes(); if (pAttrs == NULL) { //WRITELOG("END, 取得节点属性集合失败"); return 0; } lAttrCount = pAttrs->Getlength(); for (int i=0; i<lAttrCount; i++) { pAttr = pAttrs->Getitem(i); if (pAttr == NULL) { //WRITELOG("取得第[%d]个属性为空", i); continue; } hr = pAttr->get_nodeName(&bstrText); if (FAILED(hr)) { //WRITELOG("取得第[%d]个属性名为空", i); continue; } if (!ConvertBSTR2CString(str, bstrText.m_str)) { //WRITELOG("转换第[%d]个属性名 失败", i); continue; } hr = pAttr->get_text(&bstrText); if (FAILED(hr)) { //WRITELOG("取得第[%d]个属性值 失败,属性[%s]", i, str); continue; } mapAttrs.insert(make_pair(str, bstrText)); } return (int)mapAttrs.size(); }
bool XMLElement::hasAttributes() const { bool found = false; MSXML2::IXMLDOMNamedNodeMapPtr attrs; if (nodePtr) { if ((nodePtr->get_attributes(&attrs)) == S_OK) { if (attrs->Getlength() > 0) found = true; } } return found; }
BOOL WXmlParse::readCalculateParams(WCalcaulateParam &calParam) { MSXML2::IXMLDOMDocumentPtr doc; MSXML2::IXMLDOMElementPtr docRoot; MSXML2::IXMLDOMElementPtr docElement; MSXML2::IXMLDOMNodeListPtr elementNodes; MSXML2::IXMLDOMNamedNodeMapPtr elementAttributes; MSXML2::IXMLDOMNodePtr xmlNode; MSXML2::IXMLDOMNodePtr xmlSubNode; MSXML2::IXMLDOMNodePtr xmlAttrNode; doc.CreateInstance(__uuidof(DOMDocument30)); if (m_strFileName.IsEmpty()) { return FALSE; } doc->load((_variant_t)m_strFileName); docRoot = doc->GetdocumentElement();//获得根节点; docRoot->get_childNodes(&elementNodes); LONG length, subLength, attrLength; elementNodes->get_length(&length); MSXML2::IXMLDOMNodeListPtr subElementNodes; // 0 : elementNodes->get_item(2, &xmlNode); xmlNode->get_childNodes(&subElementNodes); subElementNodes->get_length(&subLength); for (int j = 0; j < subLength;j++) { subElementNodes->get_item(j, &xmlSubNode);//获得某个属性 xmlSubNode->get_attributes(&elementAttributes); MSXML2::IXMLDOMNodePtr proNode = elementAttributes->getNamedItem("name"); string proName = proNode->text; MSXML2::IXMLDOMNodeListPtr subAttrNodes; xmlSubNode->get_childNodes(&subAttrNodes); subAttrNodes->get_length(&attrLength); // ASSERT(attrLength == 2); MSXML2::IXMLDOMNodePtr descNode; MSXML2::IXMLDOMNodePtr stateNode; subAttrNodes->get_item(0, &descNode); subAttrNodes->get_item(1, &stateNode); std::vector<string> vecParam; string descText = descNode->text; string stateText = stateNode->text; vecParam.push_back(proName); vecParam.push_back(descText); vecParam.push_back(stateText); calParam.addParam(vecParam); } return TRUE; }
int CXmlNodeWrapper::NumAttributes() { if (IsValid()) { MSXML2::IXMLDOMNamedNodeMapPtr attribs = m_xmlnode->Getattributes(); if (attribs) return attribs->Getlength(); } return 0; }
/****************************************************************************** Function Name : GetData Input(s) : Output : HRESULT Functionality : Member of : CVerifyEntity Friend of : - Author(s) : Venkatanarayana Makam Date Created : 06/04/2011 Modifications : ******************************************************************************/ HRESULT CVerifyEntity::GetCommonVerifyData(MSXML2::IXMLDOMNodePtr& pIDomNode, CVerifyData *verifyData) { m_ouData = verifyData; _bstr_t bstrNodeName = def_STR_VERIFYMSG_NODE; CComVariant NodeValue; MSXML2::IXMLDOMNamedNodeMapPtr pDOMVerifyAtrributes; MSXML2::IXMLDOMNodePtr pIDOMChildNode; pDOMVerifyAtrributes = pIDomNode->Getattributes(); //bstrNodeName = L"failure"; bstrNodeName.Assign(SysAllocString(CT2W("failure"))); pIDOMChildNode = pDOMVerifyAtrributes->getNamedItem(bstrNodeName); pIDOMChildNode->get_nodeTypedValue(&NodeValue); CString strTemp; strTemp = strCopyBSTRToCString(NodeValue); //m_ouData = new CVerifyData(); if(strTemp == "SUCCESS") { m_ouData->m_eAttributeError = SUCCESS; } else if(strTemp == "WARNING") { m_ouData->m_eAttributeError = WARNING; } else if(strTemp == "ERRORS") { m_ouData->m_eAttributeError = ERRORS; } else { m_ouData->m_eAttributeError = FATAL; } MSXML2::IXMLDOMNodeListPtr pIDOMSendList; LONG lCount; //bstrNodeName = def_STR_VERIFYMSG_NODE; bstrNodeName.Assign(SysAllocString(CT2W(def_STR_VERIFYMSG_NODE))); pIDOMSendList = pIDomNode->selectNodes(bstrNodeName); pIDOMSendList->get_length(&lCount); for(int i = 0; i < lCount; i++) { CVerifySubEntity *odVerifySubEntity; MSXML2::IXMLDOMNodePtr pIXMLDOMVerifyMsgEntity; pIXMLDOMVerifyMsgEntity = pIDOMSendList->Getitem(i); //if(CVerifySubEntity::GetData(&odVerifySubEntity, pIXMLDOMVerifyMsgEntity) == S_OK) if(this->GetSubEntityData(&odVerifySubEntity, pIXMLDOMVerifyMsgEntity) == S_OK) { m_ouData->m_odVerifySubEntityList.push_back(odVerifySubEntity); } } return S_OK; }
XMLAttribute XMLElement::getFirstAttribute() const { XMLAttribute attr; MSXML2::IXMLDOMNamedNodeMapPtr attrs; if (nodePtr) { if ((nodePtr->get_attributes(&attrs)) == S_OK) { if (attrs->Getlength() > 0) { attr.attrPtr = attrs->Getitem(0); } } } return attr; }
//////////////////////////////////////////////////////////////////////////// // Helper function: //////////////////////////////////////////////////////////////////////////// CString CXMLDocument::GetStringValue(LPCSTR szAttrib, MSXML2::IXMLDOMNode* pNode) { CComBSTR bstrValue; MSXML2::IXMLDOMNamedNodeMapPtr pAttributes; MSXML2::IXMLDOMNodePtr pItemNode; if (SUCCEEDED(pNode->get_attributes(&pAttributes)) && (pAttributes != NULL)) pAttributes->getNamedItem(CComBSTR(szAttrib), &pItemNode); if (pItemNode) pItemNode->get_text(&bstrValue); return CString(bstrValue); }
void addTextAttributeToNode(MSXML2::IXMLDOMDocumentPtr& xmlDoc, MSXML2::IXMLDOMNodePtr& targetNode, const String& attributeName, const String& attributeValue) { MSXML2::IXMLDOMNodePtr attributeNode = xmlDoc->createNode(NODE_ATTRIBUTE, attributeName.c_str(), _T("")); setNodeText(attributeNode, attributeValue); MSXML2::IXMLDOMNamedNodeMapPtr attributes = targetNode->Getattributes(); if (attributes == NULL) { throw XMLUtils::ParseError(); } attributes->setNamedItem(attributeNode); }
BOOL WXmlParse::readParam(std::vector<WParamDefine *> &outParams) { MSXML2::IXMLDOMDocumentPtr doc; MSXML2::IXMLDOMElementPtr docRoot; MSXML2::IXMLDOMElementPtr docElement; MSXML2::IXMLDOMNodeListPtr elementNodes; MSXML2::IXMLDOMNamedNodeMapPtr elementAttributes; MSXML2::IXMLDOMNodePtr xmlNode; MSXML2::IXMLDOMNodePtr xmlSubNode; MSXML2::IXMLDOMNodePtr xmlAttrNode; doc.CreateInstance(__uuidof(DOMDocument30)); if (m_strFileName.IsEmpty()) { return FALSE; } doc->load((_variant_t)m_strFileName); docRoot = doc->GetdocumentElement();//获得根节点; docRoot->get_childNodes(&elementNodes); LONG length, subLength, attrLength; elementNodes->get_length(&length); MSXML2::IXMLDOMNodeListPtr subElementNodes; // 0 : elementNodes->get_item(0, &xmlNode); xmlNode->get_childNodes(&subElementNodes); subElementNodes->get_length(&subLength); for (int j = 0; j < subLength;j++) { subElementNodes->get_item(j, &xmlSubNode);//获得某个属性 xmlSubNode->get_attributes(&elementAttributes); MSXML2::IXMLDOMNodePtr proNode = elementAttributes->getNamedItem("name"); string proName = proNode->text; WParamDefine *paramTest = new WParamDefine(proName); MSXML2::IXMLDOMNodeListPtr subAttrNodes; xmlSubNode->get_childNodes(&subAttrNodes); subAttrNodes->get_length(&attrLength); for (int k = 0;k < attrLength;k++) { subAttrNodes->get_item(k, &xmlAttrNode); string attrName = xmlAttrNode->nodeName; string attrText = xmlAttrNode->text; paramTest->addValue(attrName, attrText); } outParams.push_back(paramTest); } return TRUE; }
CString CXmlNodeWrapper::GetAttribName(int index) { if (IsValid()) { MSXML2::IXMLDOMNamedNodeMapPtr attribs = m_xmlnode->Getattributes(); if (attribs) { MSXML2::IXMLDOMAttributePtr attrib = attribs->Getitem(index); if (attrib) return (LPCTSTR)attrib->Getname(); } } return _T(""); }
bool XmlIOStreamImp::ReadNodeAttribute(const CString& attrName, CString& attrValue) { DATA_ASSERT(mpCurrentNode != NULL); if(NULL == mpCurrentNode) return false; MSXML2::IXMLDOMNamedNodeMapPtr attribs = mpCurrentNode->Getattributes(); MSXML2::IXMLDOMNodePtr pAttr = attribs->getNamedItem((LPCTSTR)attrName); if(NULL == pAttr) return false; attrValue = pAttr->GetnodeValue(); return true; }
void readMesh(dae_reader_t *reader, MSXML2::IXMLDOMNodePtr geometry) { MSXML2::IXMLDOMNodePtr mesh = geometry->selectSingleNode("r:mesh"); if (mesh == NULL) return; geometry_t object; MSXML2::IXMLDOMNamedNodeMapPtr attributes = geometry->attributes; if (attributes->length > 0) object.name = attributes->getNamedItem("name")->text; readVerticesNormalsTexcoords(mesh, object); readTriangles(mesh, object); object.maxIndex = 0; reader->geometry.push_back(object); }
BOOL WXmlParse::readObject(ExternalObject *objRet, MSXML2::IXMLDOMNodePtr &xmlSubNode) { MSXML2::IXMLDOMNamedNodeMapPtr elementAttributes; MSXML2::IXMLDOMNodeListPtr subElementNodes; MSXML2::IXMLDOMNodeListPtr subSubElementNodes; MSXML2::IXMLDOMNodePtr xmlNodeTmp; xmlSubNode->get_attributes(&elementAttributes); LONG attrLength; attrLength = elementAttributes->Getlength(); MSXML2::IXMLDOMNodePtr nameNode = elementAttributes->getNamedItem("name"); MSXML2::IXMLDOMNodePtr clsNode = elementAttributes->getNamedItem("type"); objRet->objName = nameNode->text; objRet->clsName = clsNode->text; LONG length, subLength; xmlSubNode->get_childNodes(&subElementNodes); subElementNodes->get_length(&length); objRet->attri.clear(); for (int i = 0;i < length;i++) { subElementNodes->get_item(i, &xmlNodeTmp); string childName = xmlNodeTmp->nodeName; if (strcmp(xmlNodeTmp->nodeName,"child") != 0) { xmlNodeTmp->get_attributes(&elementAttributes); if (!elementAttributes) return FALSE; MSXML2::IXMLDOMNodePtr typeNode = elementAttributes->getNamedItem("type"); objRet->attri.push_back(std::make_pair(xmlNodeTmp->nodeName, std::make_pair(typeNode->text, xmlNodeTmp->text))); } else { xmlNodeTmp->get_childNodes(&subSubElementNodes); subSubElementNodes->get_length(&subLength); for (int j = 0;j < subLength;j++) { ExternalObject *objSub = new ExternalObject(); subSubElementNodes->get_item(j, &xmlNodeTmp); readObject(objSub, xmlNodeTmp); objRet->children.push_back(objSub); } } } return TRUE; }
void CXmlNodeWrapper::SetValue(LPCTSTR valueName,LPCTSTR value) { MSXML2::IXMLDOMDocumentPtr xmlDocument = m_xmlnode->GetownerDocument(); if (xmlDocument) { MSXML2::IXMLDOMNamedNodeMapPtr attributes = m_xmlnode->Getattributes(); if (attributes) { MSXML2::IXMLDOMAttributePtr attribute = xmlDocument->createAttribute(valueName); if (attribute) { attribute->Puttext(value); attributes->setNamedItem(attribute); } } } }
bool XMLElement::getAttributeValue(const char *attributeName, std::string& attributeValue) const { bool found = false; MSXML2::IXMLDOMNamedNodeMapPtr attrs; MSXML2::IXMLDOMNodePtr attr; BSTR bstr; if (nodePtr) { if ((nodePtr->get_attributes(&attrs)) == S_OK) { if ((attrs->raw_getNamedItem(_bstr_t(attributeName), &attr)) == S_OK) { if ((attr->get_text(&bstr)) == S_OK) { attributeValue = bstrToString(bstr).c_str(); found = true; } } } } return found; }
//////////////////////////////////////////////////////////////////////////// // Helper function: //////////////////////////////////////////////////////////////////////////// CString CXMLDocument::GetStringValue(LPCSTR szNodePattern, LPCSTR szAttrib, MSXML2::IXMLDOMNode* pNode) { CComBSTR strNodePattern(szNodePattern); MSXML2::IXMLDOMNodePtr pPatternNode; CComBSTR strValue; pNode->selectSingleNode(strNodePattern, &pPatternNode); if (pPatternNode) { MSXML2::IXMLDOMNamedNodeMapPtr pAttributes; MSXML2::IXMLDOMNodePtr pItemNode; if (SUCCEEDED(pPatternNode->get_attributes(&pAttributes)) && (pAttributes != NULL)) pAttributes->getNamedItem(CComBSTR(szAttrib), &pItemNode); if (pItemNode) pItemNode->get_text(&strValue); } return CString(strValue); }
void XmlParser::_parseNodeGetAttributes(MSXML2::IXMLDOMNode *pIDOMNode, XmlNode& node) { MSXML2::IXMLDOMNamedNodeMapPtr attributes = pIDOMNode->attributes; BSTR attrName; for (int i = 0; i < attributes->Getlength(); i++) { MSXML2::IXMLDOMNodePtr atrr = attributes->Getitem(i); atrr->get_nodeName(&attrName); _variant_t val = atrr->GetnodeValue(); wstring name(attrName); BSTR b = val.bstrVal; wstring value(b); XmlAttribute attribute(name, value); node.AddAttribute(attribute); } }
bool CNodeUtil::bReadAttribute(MSXML2::IXMLDOMNode* iNode, std::string& omAttribute, _bstr_t temp) { std::string strTemp; bool bResult = false; MSXML2::IXMLDOMNamedNodeMapPtr pCodeAttrib; MSXML2::IXMLDOMNodePtr iTempNode = nullptr; pCodeAttrib = iNode->Getattributes(); if (pCodeAttrib->Getlength() >= 1) { iTempNode = pCodeAttrib->getNamedItem(temp); if (iTempNode != nullptr) { omAttribute = _com_util::ConvertBSTRToString(iTempNode->text.GetBSTR()); bResult = true; } } return bResult; }
void readTriangles(MSXML2::IXMLDOMNodePtr mesh, geometry_t &geometry) { MSXML2::IXMLDOMNodeListPtr polyLists = mesh->selectNodes("r:polylist"); // blender MSXML2::IXMLDOMNodePtr p; if (polyLists->length == 0) polyLists = mesh->selectNodes("r:triangles"); // 3dsmax for (int i = 0; i < polyLists->length; i++) { MSXML2::IXMLDOMNodePtr polylist = polyLists->item[i]; MSXML2::IXMLDOMNodePtr p = polylist->selectSingleNode("r:p"); if (p == NULL) continue; geometry.vertexOffset.push_back(-1); geometry.normalOffset.push_back(-1); geometry.texcoordOffset.push_back(-1); MSXML2::IXMLDOMNodeListPtr inputList = polylist->selectNodes("r:input"); for (int j = 0; j < inputList->length; j++) { MSXML2::IXMLDOMNodePtr input = inputList->Getitem(j); MSXML2::IXMLDOMNamedNodeMapPtr attributes = input->attributes; string semantic = (_bstr_t)_wcslwr((wchar_t *)attributes->getNamedItem("semantic")->text); int offset = _wtoi(attributes->getNamedItem("offset")->text); if (semantic == "vertex") geometry.vertexOffset[geometry.vertexOffset.size() - 1] = offset; else if (semantic == "normal") geometry.normalOffset[geometry.normalOffset.size() - 1] = offset; else if (semantic == "texcoord") geometry.texcoordOffset[geometry.texcoordOffset.size() - 1] = offset; } vector<int> v = readValues<int>(p); geometry.triangles.push_back(v); } }
/****************************************************************************** Function Name : GetData Input(s) : MSXML2::IXMLDOMNodePtr& pIDomNode Output : HRESULT Functionality : Member of : CWaitEntity Friend of : - Author(s) : Venkatanarayana Makam Date Created : 06/04/2011 Modifications : ******************************************************************************/ HRESULT CWaitEntity::GetData(MSXML2::IXMLDOMNodePtr& pIDomNode) { _bstr_t bstrNodeName; CComVariant NodeValue; MSXML2::IXMLDOMNamedNodeMapPtr pDOMWaitAtrributes; pDOMWaitAtrributes = pIDomNode->Getattributes(); MSXML2::IXMLDOMNodePtr pIDOMChildNode; //bstrNodeName = L"purpose"; bstrNodeName.Assign(SysAllocString(CT2W("purpose"))); pIDOMChildNode = pDOMWaitAtrributes->getNamedItem(bstrNodeName); pIDOMChildNode->get_nodeTypedValue(&NodeValue); m_ouData.m_omPurpose = strCopyBSTRToCString(NodeValue); pIDomNode->get_nodeTypedValue(&NodeValue); CString strTemp; strTemp = strCopyBSTRToCString(NodeValue); //W4 Removal - Type Conversion No problem. m_ouData.m_ushDuration = (USHORT)atoi((LPCSTR)strTemp); pIDOMChildNode.Release(); pDOMWaitAtrributes.Release(); return S_OK; }
/****************************************************************************** Function Name : GetData Input(s) : MSXML2::IXMLDOMNodePtr& pIDomNode Output : HRESULT Functionality : Fills the datastructure from the XML node Member of : CTestCaseEntity Friend of : - Author(s) : Venkatanarayana Makam Date Created : 06/04/2011 Modifications : ******************************************************************************/ HRESULT CTestCaseEntity::GetData(MSXML2::IXMLDOMNodePtr& pIDomNode) { //Getting Attributes _bstr_t bstrNodeName; CComVariant NodeValue; MSXML2::IXMLDOMNamedNodeMapPtr pDOMTCAtrributes; pDOMTCAtrributes = pIDomNode->Getattributes(); MSXML2::IXMLDOMNodePtr pIDOMChildNode; //bstrNodeName = L"identifier"; bstrNodeName.Assign(SysAllocString(CT2W("identifier"))); pIDOMChildNode = pDOMTCAtrributes->getNamedItem(bstrNodeName); pIDOMChildNode->get_nodeTypedValue(&NodeValue); m_ouData.m_omID = strCopyBSTRToCString(NodeValue); pIDOMChildNode.Release(); //bstrNodeName = L"title"; bstrNodeName.Assign(SysAllocString(CT2W("title"))); pIDOMChildNode = pDOMTCAtrributes->getNamedItem(bstrNodeName); pIDOMChildNode->get_nodeTypedValue(&NodeValue); m_ouData.m_omTitle = strCopyBSTRToCString(NodeValue); pIDOMChildNode.Release(); //bstrNodeName = L"exp_handler"; bstrNodeName.Assign(SysAllocString(CT2W("exp_handler"))); pIDOMChildNode = pDOMTCAtrributes->getNamedItem(bstrNodeName); pIDOMChildNode->get_nodeTypedValue(&NodeValue); CString strTemp; strTemp = strCopyBSTRToCString(NodeValue); pIDOMChildNode.Release(); if(strTemp == "CONTINUE") { m_ouData.m_eExcpAction = CONTINUE; } else { m_ouData.m_eExcpAction = EXIT; } //Getting Testcases MSXML2::IXMLDOMNodeListPtr pDOMChildList = pIDomNode->GetchildNodes(); LONG lCount; pDOMChildList->get_length(&lCount); CComBSTR NodeName; for(int i = 0;i < lCount; i++) { pIDOMChildNode = pDOMChildList->Getitem(i); pIDOMChildNode->get_nodeName(&NodeName); CBaseEntityTA *odpBaseEntity = NULL; if(NodeName == def_STR_SEND_NODE) { odpBaseEntity = new CSendEntity(); } else if(NodeName == def_STR_VERIFY_NODE) { odpBaseEntity = new CVerifyEntity(); } else if(NodeName == def_STR_WAIT_NODE) { odpBaseEntity = new CWaitEntity(); } else if(NodeName == def_STR_REPLAY_NODE) { odpBaseEntity = new CReplayEntity(); } else if(NodeName == def_STR_VERIFYRES_NODE) { odpBaseEntity = new CVerifyResponse(); } if(odpBaseEntity == NULL) { //TODO::return a correct value return -1; } odpBaseEntity->GetData(pIDOMChildNode); m_ouData.m_odTAEntityList.AddTail(odpBaseEntity); //pIDOMChildNode->Release(); } return S_OK; }
void XMLDOMParsingNodes(char *szFileName) { try { //Qualify namespase explicitly to avoid Compiler Error C2872 "ambiguous symbol" during linking. //Now Msxml2.dll use the "MSXML2" namespace //(see http://support.microsoft.com/default.aspx?scid=kb;en-us;316317): MSXML2::IXMLDOMDocumentPtr docPtr;//pointer to DOMDocument object MSXML2::IXMLDOMNodeListPtr NodeListPtr;//indexed access. and iteration through the collection of nodes MSXML2::IXMLDOMNodePtr DOMNodePtr;//pointer to the node MSXML2::IXMLDOMNode *pIDOMNode = NULL;//pointer to element's node MSXML2::IXMLDOMNode *pIParentNode = NULL;//pointer to parent node MSXML2::IXMLDOMNode *pIAttrNode = NULL;//pointer to attribute node MSXML2::IXMLDOMNamedNodeMapPtr DOMNamedNodeMapPtr;//iteration through the collection of attribute nodes MSXML2::IXMLDOMNodeList *childList=NULL;//node list containing the child nodes //Variable with the name of node to find: BSTR strFindText = L" ";//" " means to output every node //Variables to store item's name, parent, text and node type: BSTR bstrItemText,bstrItemNode, bstrItemParent,bstrNodeType; //Variables to store attribute's name,type and text: BSTR bstrAttrName, bstrAttrType, bstrAttrText; HRESULT hResult; int i = 0;//loop-index variable int n = 0;//lines counter //Initialize COM Library: CoInitialize(NULL); //Create an instance of the DOMDocument object: docPtr.CreateInstance(__uuidof(DOMDocument30)); // Load a document: _variant_t varXml(szFileName);//XML file to load _variant_t varResult((bool)TRUE);//result varResult = docPtr->load(varXml); if ((bool)varResult == FALSE) { //printf("*** Error:failed to load XML file. ***\n"); MessageBox(0,"Error: failed to load XML file. Check the file name.", \ "Load XML file",MB_OK |MB_ICONWARNING); return; } //Collect all or selected nodes by tag name: NodeListPtr = docPtr->getElementsByTagName(strFindText); //Output the number of nodes: //printf("Number of nodes: %d\n", (NodeListPtr->length)); //Output root node: docPtr->documentElement->get_nodeName(&bstrItemText); //%ls formatting is for wchar_t* parameter's type (%s for char* type): printf("\nRoot: %ls\n", bstrItemText); for(i = 0; i < (NodeListPtr->length); i++) { if (pIDOMNode) pIDOMNode->Release(); NodeListPtr->get_item(i, &pIDOMNode); if(pIDOMNode ) { pIDOMNode->get_nodeTypeString(&bstrNodeType); //We process only elements (nodes of "element" type): BSTR temp = L"element"; if (lstrcmp((LPCTSTR)bstrNodeType, (LPCTSTR)temp)==0) { n++;//element node's number printf("\n\n%d\n", n);//element node's number printf("Type: %ls\n", bstrNodeType); pIDOMNode->get_nodeName(&bstrItemNode); printf("Node: %ls\n", bstrItemNode); pIDOMNode->get_text(&bstrItemText); printf("Text: %ls\n", bstrItemText); pIDOMNode->get_parentNode(&pIParentNode); pIParentNode->get_nodeName(&bstrItemParent); printf("Parent: %ls\n",bstrItemParent); pIDOMNode->get_childNodes(&childList); printf("Child nodes: %d\n", (childList->length)); //Get the attributes: int j = 0;//loop-index variable long length;// number of attributes in the collection DOMNamedNodeMapPtr = pIDOMNode->attributes; hResult = DOMNamedNodeMapPtr->get_length(&length); if(SUCCEEDED(hResult)) { //Loop through the number of attributes: for(j = 0; j < length; j++) { //get attribute node: DOMNamedNodeMapPtr->get_item(j,&pIAttrNode); pIAttrNode->get_nodeTypeString(&bstrAttrType);//type as string printf("\nAttribute type: %ls\n", bstrAttrType); //pIAttrNode->get_nodeType(&bstrAttrType);//enumerated type //printf("Attribute type: %d\n", bstrAttrType); pIAttrNode->get_nodeName(&bstrAttrName); printf("Attribute name: %ls\n", bstrAttrName); pIAttrNode->get_text(&bstrAttrText); printf("Attribute value: %ls\n", bstrAttrText); } } // ::MessageBox(NULL, (LPCSTR) bstrItemText,"parsing", MB_OK); } } } //Do not forget to release interfaces: pIDOMNode->Release(); pIDOMNode = NULL; pIParentNode->Release(); pIParentNode = NULL; } catch(...) { MessageBox(NULL, ("*** Exception occurred ***"), ("Error message"), MB_OK); } CoUninitialize(); }