Пример #1
0
/*
	 Function name		: CXML::CreateCommentNode
	 Description	    : This helper function creates a comment for the node supplied as argumnet
	 Return type		: bool 
	 Argument			: IXMLDOMNode **pParentNode
 	 Argument			: CString csComment
*/
bool CXML::CreateCommentNode(IXMLDOMNode **ppParentNode,CString &rcsComment)
{
	if(rcsComment.IsEmpty()) 
		return false;
	if(!(*ppParentNode)) 
		return false;

	IXMLDOMNode * pNode = NULL;
	
	_variant_t vtNodeType((long)VT_I4,NODE_COMMENT);
	_bstr_t bstrNameSpace("");

	m_hr = m_pXMLDoc->createNode(vtNodeType,bstrNameSpace,bstrNameSpace,&pNode);
	if(!SUCCEEDED(m_hr))
		return false;
			

	_variant_t vtComment(rcsComment);
	m_hr = pNode->put_nodeValue(vtComment);
	if(!SUCCEEDED(m_hr))
	{
		pNode->Release();
		return false;
	}

	IXMLDOMNode * pINewNode = NULL;	
	bool bRet = AddNode(&m_pICurrentNode,&pNode,&pINewNode,NODE_COMMENT);
	if(pNode)
		pNode->Release();
	if(pINewNode)
		pINewNode->Release();

	return bRet;
}
Пример #2
0
bool CNtlXMLDoc::GetDataWithXPath(WCHAR* pwszXPath, WCHAR* pwszResultData, int nBufferSizeInWChars)
{
	if (NULL == pwszXPath || NULL == pwszResultData || 0 >= nBufferSizeInWChars)
		return false;

	IXMLDOMNode* pNode = NULL;    
	m_pXMLDocument->selectSingleNode(pwszXPath, &pNode);

	if(!pNode)
		return false;

	BSTR bstr = NULL;
	if (FAILED(pNode->get_text(&bstr)))
	{
		::SysFreeString(bstr);
		pNode->Release();			
		return false;
	}

	wcscpy_s(pwszResultData, nBufferSizeInWChars, bstr);

	::SysFreeString(bstr);
	pNode->Release();

	return true;
}
Пример #3
0
/*
	 Function name		: CXML::PreviousSibling
	 Description	    : This will move the current node to the previous sibling of the current node.
	 Return type		: bool 
	 Tested				: Ok
*/	
bool CXML::PreviousSibling()
{
	if(!m_pICurrentNode) 
		return false;

	IXMLDOMNode * pITempNode = m_pICurrentNode;
	IXMLDOMNode * pNode = NULL;

	pITempNode->AddRef();

	m_hr = pITempNode ->get_previousSibling(&pNode);
	pITempNode->Release();
	if (!SUCCEEDED(m_hr) || !pNode)
		return false;

	if(m_pICurrentNode)
	{
		m_pICurrentNode->Release();
		m_pICurrentNode= NULL;
	}

	m_pICurrentNode = pNode;
	m_pICurrentNode->AddRef();

	pNode->Release();
	return true;
}
Пример #4
0
/*
	 Function name		: CXML::DeleteNode
	 Description	    : This function will delete the current node 
	 Return type		: bool 
	 Tested				: Ok
 */	
bool CXML::DeleteNode()
{
	if(!m_pICurrentNode)
		return false;

	IXMLDOMNode * pNode = NULL;

	m_hr = m_pICurrentNode->get_nextSibling(&pNode);	
	if (!SUCCEEDED(m_hr))		
		return false;

	if(!pNode)
	{
		m_hr = m_pICurrentNode->get_parentNode(&pNode);
		if (!SUCCEEDED(m_hr))
			return false;
	}
	if(!pNode)
		return false;
	
	Delete(&m_pICurrentNode);
	if(m_pICurrentNode)
	{
		m_pICurrentNode->Release();
		m_pICurrentNode = NULL;
	}
	m_pICurrentNode = pNode;
	m_pICurrentNode->AddRef();
	pNode->Release();
	return true;
}
Пример #5
0
/*
	 Function name		: CXML::CreateTextNode
	 Description	    : This helper function create an attribute to the node supplied as argumnet
	 Return type		: bool 
	 Argument			: IXMLDOMNode **pParentNode
 	 Argument			: CString csAttribute
 	 Argument			: CString csValue
 */	
bool CXML::RemoveAttributeNode(IXMLDOMNode **pParentNode,CString csAttribute)
{
	IXMLDOMNode * pNode = NULL;
	if(csAttribute.IsEmpty())
		return false;

	if(!(*pParentNode))
		return false;
	
	IXMLDOMNamedNodeMap * pAttributes = NULL;
	m_hr = (*pParentNode)->get_attributes(&pAttributes);
	
	if(!SUCCEEDED(m_hr) || !pAttributes)
		return false;

	IXMLDOMNode *pRemovedNode = NULL;
	_bstr_t bstrAttribute(csAttribute);
	
	m_hr = pAttributes->removeNamedItem(bstrAttribute,&pRemovedNode);
	
	pAttributes->Release();
	if(!SUCCEEDED(m_hr) || !pRemovedNode)
		return false;

	pRemovedNode->Release();
	return true;
}
CXmlElement* CXmlElement::AddElement(LPWSTR pwszName)
{
    HRESULT         hr = S_OK;
    CXmlElement     *pElement = NULL;
    IXMLDOMElement  *pIElement = NULL;
    BSTR            bstrName = ::SysAllocString(pwszName);

    if (NULL != m_pIDoc)
    {       
        hr = m_pIDoc->createElement(bstrName, &pIElement);
        if (SUCCEEDED(hr))
        {
            IXMLDOMNode *pNewNode = NULL;

            hr = m_pIElement->appendChild(pIElement, &pNewNode);
            if (SUCCEEDED(hr))
            {
                pElement = new CXmlElement(m_pIDoc, pIElement);

                pNewNode->Release();
                pNewNode = NULL;
            }

            pIElement->Release();
            pIElement = NULL;
        }
    }

    ::SysFreeString(bstrName);

    return pElement;
}
Пример #7
0
std::wstring CXmlNode::GetAttribute(LPCTSTR lpAttributeName)
{
	IXMLDOMNamedNodeMap* lpNamedNodeMap;
	IXMLDOMNode* lpXMLNode;
	BSTR bstrValue;
	std::wstring strValue;
	HRESULT hr;

	if (NULL == lpAttributeName || NULL == m_pXMLNode)
		return _T("");

	lpNamedNodeMap = NULL;
	hr = m_pXMLNode->get_attributes(&lpNamedNodeMap);
	if (hr == S_OK)
	{
		lpXMLNode = NULL;
		hr = lpNamedNodeMap->getNamedItem((WCHAR *)lpAttributeName, &lpXMLNode);
		if (hr == S_OK)
		{
			hr = lpXMLNode->get_text(&bstrValue);
			if (hr == S_OK)
			{
				strValue = (WCHAR *)bstrValue;
				::SysFreeString(bstrValue);
			}
			lpXMLNode->Release();
		}
		lpNamedNodeMap->Release();
	}

	return strValue;
}
// return "" if no value at path
std::string lvDCOMInterface::doXPATH(const std::string& xpath)
{
	if (m_pxmldom == NULL)
	{
		throw std::runtime_error("m_pxmldom is NULL");
	}
	epicsGuard<epicsMutex> _lock(m_lock);
	std::map<std::string,std::string>::const_iterator it = m_xpath_map.find(xpath);
	if (it != m_xpath_map.end())
	{
		return it->second;
	}
	IXMLDOMNode *pNode = NULL;
	std::string S_res;
	BSTR bstrValue = NULL;
	HRESULT hr = m_pxmldom->selectSingleNode(_bstr_t(xpath.c_str()), &pNode);
	if (SUCCEEDED(hr) && pNode != NULL)
	{
		hr=pNode->get_text(&bstrValue);
		if (SUCCEEDED(hr))
		{
			S_res = envExpand(CW2CT(bstrValue));
			SysFreeString(bstrValue);
		}
		pNode->Release();
	}
	//	else
	//	{
	//		throw std::runtime_error("doXPATH: cannot find " + xpath);
	//	}
	m_xpath_map[xpath] = S_res;
	return S_res;
}
Пример #9
0
bool CXML::GetNodeAttributeValue(IXMLDOMNode ** ppNode,CString csAttributeName,CString &rcsValue)
{

	IXMLDOMNode *pNodeAttribute = NULL;
	IXMLDOMNamedNodeMap *pNodeMap = NULL;
	CString csTemp;

	if(!ppNode || !(*ppNode))
		return false;

	m_hr =	(*ppNode)->get_attributes(&pNodeMap);

	if (SUCCEEDED(m_hr) == 0 || pNodeMap == NULL) 
		return false;

	_bstr_t bstrAttributeName(csAttributeName);

	m_hr =	pNodeMap->getNamedItem (bstrAttributeName,&pNodeAttribute);	
	pNodeMap->Release();
	if (SUCCEEDED(m_hr) == 0 || (pNodeAttribute == NULL))	
		return false;
	
	_variant_t vtAttributeVal;
	m_hr =	pNodeAttribute->get_nodeValue(&vtAttributeVal);

	pNodeAttribute->Release();

	if (SUCCEEDED(m_hr) == 0)
		return false;
        
	rcsValue = vtAttributeVal.bstrVal;
	return true;	
}
Пример #10
0
/*
	 Function name		: CXML::MoveToParentNode
	 Description	    : This function will move to the n th parent the current node.
	 Return type		: bool
	 Argument			: UINT nNthParent
	 Tested				: Ok
*/	
bool CXML::MoveToParentNode(UINT nNthParent)
{
	if(!m_pICurrentNode) 
		return false;

	IXMLDOMNode * pITempNode = m_pICurrentNode;
	IXMLDOMNode * pNode = NULL;
	pITempNode->AddRef();

	for(UINT i=0;i<nNthParent;++i)
	{
		if(pNode)
		{
			pNode ->Release();
			pNode = NULL;
		}

		m_hr = pITempNode ->get_parentNode(&pNode);
		if (!SUCCEEDED(m_hr) || !pNode)
		{
			pITempNode->Release();
			return false;
		}

		if(pITempNode)
		{
			pITempNode->Release();
			pITempNode  = NULL;
		}

		pITempNode = pNode;
		pITempNode->AddRef();
	}

	if(pNode)
	{
		pITempNode->Release();
		m_pICurrentNode->Release();
		m_pICurrentNode = pNode;
		m_pICurrentNode->AddRef();
		pNode->Release();
		pNode= NULL;
	}
	return true;
}
Пример #11
0
/*
	Function name	: CXML::CreateAttributeNode
	Description	    : 
	Return type		: bool 
	Argument        : IXMLDOMNode **pParentNode
	Argument        : CString csAttribute
	Argument        : CString csValue
	Tested			: Ok
*/
bool CXML::CreateAttributeNode(IXMLDOMNode **pParentNode,CString csAttribute,CString csValue)
{
	IXMLDOMNode * pNode = NULL;
	if(csAttribute.IsEmpty())
		return false;

	if(!(*pParentNode))
		return false;

	_variant_t vtNodeType((long)NODE_ATTRIBUTE);

	_bstr_t bstrName(csAttribute);
	_bstr_t bstrNameSpace("");

	m_hr = m_pXMLDoc->createNode(vtNodeType,bstrName,bstrNameSpace,&pNode);
	if(!SUCCEEDED(m_hr))
		return false;

	IXMLDOMNamedNodeMap * pAttributes = NULL;
	m_hr = (*pParentNode)->get_attributes(&pAttributes);
	
	if(!SUCCEEDED(m_hr) || !pAttributes)
	{
		pNode->Release();
		return false;
	}

	IXMLDOMNode *pNewNode = NULL;
	m_hr = pAttributes->setNamedItem(pNode,&pNewNode);

	pNode->Release();
	pAttributes->Release();
	if(!SUCCEEDED(m_hr) || !pNewNode)
		return false;

	
	_variant_t vtValue(csValue);
	m_hr =	pNewNode->put_nodeValue(vtValue);

	pNewNode->Release();
	if(!SUCCEEDED(m_hr) || !pNewNode)
		return false;

	return true;
}
Пример #12
0
bool CXML::SetAttributeValue(CString csPathToNode,CString csAttributeName,CString csValue,bool bCurrentNodeAsBase)
{
	IXMLDOMNode * pNode = NULL;
	if(!GetNode(&pNode,csPathToNode,NULL,NULL,bCurrentNodeAsBase))
		return false;

	if(RemoveAttributeNode(&pNode,csAttributeName))
		if(CreateAttributeNode(&pNode,csAttributeName,csValue))
		{
			pNode->Release();
			m_pIRootNode->Release();
			return true;
		}

	pNode->Release();
	
	return false;
}
Пример #13
0
IXMLDOMNode *CXML::NextChildNode(IXMLDOMNode **ppNode)
{
	if(!(*ppNode))
		return NULL;

	IXMLDOMNode * pNode = NULL;
	IXMLDOMNodeList * pChildList = NULL;
	
	// Get the list of child nodes of the current node

	m_hr = (*ppNode)->get_childNodes(&pChildList);
	if (!SUCCEEDED(m_hr))
		return NULL;
	// loop through the childs
	DOMNodeType nodeType;
	while(true)
	{
		// Get the node type of each child, if it is of NODE_ELEMENT type set it as current node
		m_hr = pChildList->nextNode(&pNode);
		if(!SUCCEEDED(m_hr))
		{
			pChildList->Release();
			return NULL;
		}
		if(!pNode) break;
		m_hr = pNode->get_nodeType(&nodeType);
		if(!SUCCEEDED(m_hr))
		{
			pChildList->Release();
			pNode->Release();
			return NULL;
		}

		if(nodeType == NODE_ELEMENT)
			break;
		if(pNode)
			pNode->Release();
	}

	if(pChildList)
		pChildList->Release();

	return pNode;
}
Пример #14
0
/** 
 * получение xml-узла из списка по его имени
 * @param NodeName имя искомого узла
 * @param pIDOMNodeList дескриптор списка
 * @return дескриптор нужного узла, или NULL в случае неудачи
 * @see ConfGetNodeByName() 
 * @see ConfGetNodeText() 
 * @see ConfGetTextByName()
 */
IXMLDOMNode * ConfGetListNodeByName(BSTR NodeName, IXMLDOMNodeList *pIDOMNodeList)
{    
    IXMLDOMNode *Ret = NULL;
    LONG len = 0;
    
    if (pIDOMNodeList == NULL)
    {
        return NULL;
    }

    HRESULT hr = pIDOMNodeList->get_length(&len);
    if (SUCCEEDED(hr))
    {
        pIDOMNodeList->reset();
        for (int i = 0; i < len; i++)
        {
            IXMLDOMNode *pIDOMChildNode = NULL;
            hr = pIDOMNodeList->get_item(i, &pIDOMChildNode);
            if (SUCCEEDED(hr))
            {
                BSTR ChildNodeName = NULL;
                hr = pIDOMChildNode->get_nodeName(&ChildNodeName);
                if (SUCCEEDED(hr))
                {
                    if (!wcscmp(NodeName, ChildNodeName))
                    {
                        Ret = pIDOMChildNode;
                    }
                }                

                if (ChildNodeName)
                {
                    SysFreeString(ChildNodeName);                    
                }

                if (Ret)
                {
                    return Ret;
                }

                pIDOMChildNode->Release();
                pIDOMChildNode = NULL;                
            } 
            else 
            {
                DbgMsg(__FILE__, __LINE__, "pIDOMNodeList->get_item() ERROR 0x%.8x\n", hr);
            }
        }
    } 
    else 
    {
        DbgMsg(__FILE__, __LINE__, "pIDOMNodeList->get_length() ERROR 0x%.8x\n", hr);
    }

    return NULL;
}
Пример #15
0
/*
	Function name	: CXML::GoToNode
	Description	    : Moves to the node having the specified text
	Return type		: bool 
	Argument        : CString csPathToNode
	Argument        : CString csNodeText
	Argument        : bool bCurrentNodeAsBase
	Tested			: Not working
*/
bool CXML::GoToNodeEx(CString csPathToNode,CString csNodeText,bool bCurrentNodeAsBase)
{
	CString csPath;
	IXMLDOMNode *pBaseNode = NULL;
	
	if(bCurrentNodeAsBase)
	{
		if(!m_pICurrentNode) return false;

		pBaseNode = m_pICurrentNode;
		pBaseNode->AddRef();
		csPath.Format("./%s[.= \"%s\"]",csPathToNode,csNodeText);
	}
	else
	{
		if(!m_pIRootNode) return false;
		pBaseNode = m_pIRootNode;
		pBaseNode->AddRef();
		csPath.Format("/%s[.= \"%s\"]",csPathToNode,csNodeText);
	}

	BSTR bstrPath = csPath.AllocSysString();

	IXMLDOMNode * pNode = NULL;
	m_hr = pBaseNode->selectSingleNode(bstrPath,&pNode);
	pBaseNode->Release();
	SysFreeString(bstrPath);

	if(!SUCCEEDED(m_hr) || !pNode)
		return false;


	if(m_pICurrentNode)
	{
		m_pICurrentNode->Release();
		m_pICurrentNode = NULL;
	}
	m_pICurrentNode = pNode;
	m_pICurrentNode->AddRef();
	pNode->Release();	
	return true;
}
//uvolni referenci alokovanou pro ItemData
void CXMLTree::OnDeleteitem(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	IXMLDOMNode * np = (IXMLDOMNode *) pNMTreeView->itemOld.lParam;

	if (np != NULL) np->Release();

	
	*pResult = 0;
}
Пример #17
0
/*
	Function name	: CXML::CreateAttribute
	Description	    : This function adds an attribute to the given node
					: with attributes and value and the text supplied 
	Return type		: bool 
	Argument        : CString  csPathToNode
	Argument        : CString csAttribute
	Argument        : CString csValue
	Argument        : bool bCurrentNodeAsBase
*/
bool CXML::CreateAttribute(CString  csPathToNode,CString csAttribute,CString csValue,bool bCurrentNodeAsBase)
{
	IXMLDOMNode * pNode = NULL;
	if(!GetNode(&pNode,csPathToNode,NULL,NULL,bCurrentNodeAsBase))
		return false;

	bool bRet = CreateAttributeNode(&pNode,csAttribute,csValue);
	
	pNode->Release();
	return bRet;
}
Пример #18
0
/*
	 Function name		: CXML::Delete
	 Description	    : This helper function delete the node supplied node
	 Return type		: bool 
	 Argument			: IXMLDOMNode **ppRemoveNode
	 Tested				: Ok
 */	
bool CXML::Delete(IXMLDOMNode **ppRemoveNode)
{
	if(!(*ppRemoveNode)) return false;

	IXMLDOMNode * pParentNode = NULL;
	IXMLDOMNode * pRemovedNode = NULL;

	m_hr = (*ppRemoveNode)->get_parentNode(&pParentNode );
	if(!SUCCEEDED(m_hr) || !pParentNode)
		return false;


	m_hr = pParentNode->removeChild(*ppRemoveNode,&pRemovedNode);
	pParentNode->Release();
	if(!SUCCEEDED(m_hr) || !pRemovedNode)
		return false;

	pRemovedNode->Release();
	return true;
}
Пример #19
0
bool CXML::GetAttributeValue(CString csPathToNode,CString csAttributeName,CString &rcsValue,bool bCurrentNodeAsBase )
{
	IXMLDOMNode *pNode = NULL;

	if(!GetNode(&pNode,csPathToNode,NULL,NULL,bCurrentNodeAsBase ))
		return false;

	bool bRet = GetNodeAttributeValue(&pNode,csAttributeName,rcsValue);
	if(pNode)
		pNode->Release();
	return bRet;
}
Пример #20
0
bool SettingsXML::SetAttr(IXMLDOMNode* apNode, IXMLDOMNamedNodeMap* apAttrs, const wchar_t* asName, const wchar_t* asValue)
{
	bool lbRc = false;
	HRESULT hr = S_OK;
	IXMLDOMNode *pValue = NULL;
	IXMLDOMAttribute *pIXMLDOMAttribute = NULL;
	BSTR bsText = NULL;
	bsText = ::SysAllocString(asName);
	hr = apAttrs->getNamedItem(bsText, &pValue);

	BSTR bsValue = ::SysAllocString(asValue);
	wchar_t* pszEsc = wcschr(bsValue, (wchar_t)27);
	if (pszEsc != NULL)
	{
		_ASSERTE(wcschr(bsValue, (wchar_t)27) == NULL); // У DOM сносит крышу, если писать "ESC" в значение
		while ((pszEsc = wcschr(bsValue, (wchar_t)27)) != NULL)
		{
			*pszEsc = L'?';
		}
	}

	if (FAILED(hr) || !pValue)
	{
		hr = mp_File->createAttribute(bsText, &pIXMLDOMAttribute);
		_ASSERTE(hr == S_OK);

		if (SUCCEEDED(hr) && pIXMLDOMAttribute)
		{
			VARIANT vtValue; vtValue.vt = VT_BSTR; vtValue.bstrVal = bsValue;
			hr = pIXMLDOMAttribute->put_nodeValue(vtValue);
			_ASSERTE(hr == S_OK);
			hr = apAttrs->setNamedItem(pIXMLDOMAttribute, &pValue); //-V519
			_ASSERTE(hr == S_OK);
			lbRc = SUCCEEDED(hr);
		}
	}
	else if (SUCCEEDED(hr) && pValue)
	{
		hr = pValue->put_text(bsValue);
		_ASSERTE(hr == S_OK);
		lbRc = SUCCEEDED(hr);
	}

	::SysFreeString(bsText); bsText = NULL;
	::SysFreeString(bsValue); bsValue = NULL;

	if (pValue) { pValue->Release(); pValue = NULL; }

	if (pIXMLDOMAttribute) { pIXMLDOMAttribute->Release(); pIXMLDOMAttribute = NULL; }

	return lbRc;
}
Пример #21
0
// FindElements
UINT COpcXmlDocument::FindElements(const COpcString& cXPath, COpcXmlElementList& cElements)
{
    cElements.RemoveAll();

    // check if document exists.
    if (m_ipDocument == NULL)
    {
        return 0;
    }

    // search for matching nodes.
    IXMLDOMNodeList* ipNodes = NULL;

    BSTR bstrQuery = SysAllocString(cXPath);
    HRESULT hResult = m_ipDocument->selectNodes(bstrQuery, &ipNodes);
    SysFreeString(bstrQuery);

    if (FAILED(hResult))
    {
        return 0;
    }

    // add found nodes to element list.
    do
    {
        IXMLDOMNode* ipNode = NULL;

        hResult = ipNodes->nextNode(&ipNode);

        if (hResult != S_OK || ipNode == NULL)
        {
            break;
        }

        COpcXmlElement cElement(ipNode);
        ipNode->Release();

        if (cElement != NULL)
        {
            cElements.Append(cElement);
        }
    }
    while (SUCCEEDED(hResult));

    if (ipNodes != NULL)
    {
        ipNodes->Release();
    }

    // return the number of elements found.
    return cElements.GetSize();
}
Пример #22
0
// New
bool COpcXmlDocument::New()
{
    HRESULT hResult = S_OK;

    IXMLDOMProcessingInstruction* ipHeader = NULL;
    IXMLDOMNode*                  ipResult = NULL;

    BSTR bstrDocType = SysAllocString(TAG_DOCTYPE);
    BSTR bstrFormat  = SysAllocString(TAG_FORMAT);

    TRY
    {
        // create new document instance.
        if (!Init())
        {
            THROW_(hResult, E_FAIL);
        }

        // add document header.
        hResult = m_ipDocument->createProcessingInstruction(bstrDocType, bstrFormat, &ipHeader);

        if (FAILED(hResult))
        {
            THROW();
        }

        hResult = m_ipDocument->appendChild(ipHeader, &ipResult);

        if (FAILED(hResult))
        {
            THROW();
        }
    }

    CATCH
    {
        Clear();
    }

    FINALLY
    {
        // release memory.
        if (ipHeader != NULL) ipHeader->Release();
        if (ipResult != NULL) ipResult->Release();

        SysFreeString(bstrDocType);
        SysFreeString(bstrFormat);
    }

    return SUCCEEDED(hResult);
}
Пример #23
0
/** 
 * получение значения подузла по его имени
 * @param pIDOMNode дескриптор родительского узла
 * @param name имя дочернего узла, значение которого необходимо получить
 * @param val адресс указателя на unicode-строку, в которую будет записано значение
 * @return TRUE если всё ОК, FALSE в случае ошибки
 * @see ConfGetListNodeByNameA() 
 * @see ConfGetListNodeByName() 
 * @see ConfGetNodeByName() 
 * @see ConfGetNodeText() 
 * @see ConfGetTextByName()
 */
BOOL ConfAllocGetTextByNameW(IXMLDOMNode *pIDOMNode, PWSTR name, PWSTR *value)
{
    BOOL bRet = FALSE;
    
    IXMLDOMNode *pIDOMChildNode = ConfGetNodeByName(name, pIDOMNode);
    if (pIDOMChildNode)
    {
        bRet = ConfGetNodeTextW(pIDOMChildNode, value);        
    
        pIDOMChildNode->Release();
    }

    return bRet;
}
Пример #24
0
void SettingsXML::AppendText(IXMLDOMNode* apFrom, BSTR asText)
{
	if (!asText || !*asText)
		return;

	VARIANT vtType;
	IXMLDOMNode* pChild = NULL;
	IXMLDOMNode *pIXMLDOMNode = NULL;
	vtType.vt = VT_I4; vtType.lVal = NODE_TEXT;
	HRESULT hr = mp_File->createNode(vtType, L"", L"", &pChild);

	if (SUCCEEDED(hr) && pChild)
	{
		hr = pChild->put_text(asText);
		hr = apFrom->appendChild(pChild, &pIXMLDOMNode); //-V519
		pChild->Release(); pChild = NULL;

		if (SUCCEEDED(hr) && pIXMLDOMNode)
		{
			pIXMLDOMNode->Release(); pIXMLDOMNode = NULL;
		}
	}
}
Пример #25
0
bool CXML::AddNodeText(CString csPathToNode,CString csNodeText,bool bCurrentNodeAsBase )
{
	if(csPathToNode.IsEmpty() || csNodeText.IsEmpty())
		return false;

	IXMLDOMNode *pNode = NULL;
	if(!GetNode(&pNode,csPathToNode,NULL,NULL,bCurrentNodeAsBase))
		return false;
	bool bRet = CreateNodeText(&pNode,csNodeText);
	if(pNode)
		pNode->Release();
	return bRet;

}
Пример #26
0
bool CXML::DeleteNode(CString csPathToNode,bool bCurrentNodeAsBase)
{
	if(csPathToNode.IsEmpty()) return false;
	
	IXMLDOMNode * pRemoveNode = NULL;
		
	if(!GetNode(&pRemoveNode,csPathToNode,NULL,NULL,bCurrentNodeAsBase))
		return false;

	bool bRet = Delete(&pRemoveNode);
	
	pRemoveNode->Release();

	return bRet;
}
bool lvDCOMInterface::doXPATHbool(const std::string& xpath)
{
	if (m_pxmldom == NULL)
	{
		throw std::runtime_error("m_pxmldom is NULL");
	}
	epicsGuard<epicsMutex> _lock(m_lock);
	std::map<std::string,bool>::const_iterator it = m_xpath_bool_map.find(xpath);
	if (it != m_xpath_bool_map.end())
	{
		return it->second;
	}
	IXMLDOMNode *pNode = NULL;
	bool res = false;
	BSTR bstrValue = NULL;
	std::string bool_str;
	HRESULT hr = m_pxmldom->selectSingleNode(_bstr_t(xpath.c_str()), &pNode);
	if (SUCCEEDED(hr) && pNode != NULL)
	{
		hr=pNode->get_text(&bstrValue);
		if (SUCCEEDED(hr))
		{
			bool_str = envExpand(CW2CT(bstrValue));
			if (bool_str.size() == 0)
			{
				res = false;
			}
			// allow true / yes / non_zero_number
			// note: atol() returns 0 for non numeric strings, so OK in a test for "true"
			else if ( (bool_str[0] == 't') || (bool_str[0] == 'T') || (bool_str[0] == 'y') || (bool_str[0] == 'Y') || (atol(bool_str.c_str()) != 0) )
			{
				res = true;
			}
			else
			{
				res = false;
			}
			SysFreeString(bstrValue);
		}
		pNode->Release();
	}
	//	else
	//	{
	//		throw std::runtime_error("doXPATHbool: cannot find " + xpath);
	//	}
	m_xpath_bool_map[xpath] = res;
	return res;
}
Пример #28
0
bool CXML::DeleteNode(CString csPathToNode,CString csAttribute,CString csValue,bool bUseBase)
{
	if(csPathToNode.IsEmpty()) return false;
	
	IXMLDOMNode * pRemoveNode = NULL;
		
	if(!GetNode(&pRemoveNode,csPathToNode,csAttribute,csValue,bUseBase))
		return false;

	bool bRet = Delete(&pRemoveNode);

	if(pRemoveNode)
		pRemoveNode->Release();

	return bRet;
}
Пример #29
0
//--------------------------------------------------------------------------------------
BOOL ConfGetNodeAttributeW(IXMLDOMNode *pIDOMNode, PWSTR name, PWSTR *value)
{
    BOOL bRet = FALSE;
    IXMLDOMNamedNodeMap *pIXMLDOMNamedNodeMap = NULL;

    // query attributes map
    HRESULT hr = pIDOMNode->get_attributes(&pIXMLDOMNamedNodeMap);
    if (SUCCEEDED(hr) && pIXMLDOMNamedNodeMap)
    {
        IXMLDOMNode *pIDOMAttrNode = NULL;

        // query attribute node
        hr = pIXMLDOMNamedNodeMap->getNamedItem(name, &pIDOMAttrNode);
        if (SUCCEEDED(hr) && pIDOMAttrNode)
        {
            VARIANT varValue;
            hr = pIDOMAttrNode->get_nodeValue(&varValue);
            if (FAILED(hr))
            {
                DbgMsg(__FILE__, __LINE__, "pIDOMAttrNode->get_nodeValue() ERROR 0x%.8x\n", hr);
                goto free;
            }

            BSTR val = _bstr_t(varValue);
            DWORD Len = (wcslen((PWSTR)val) + 1) * sizeof(WCHAR);
            if (*value = (PWSTR)M_ALLOC(Len))
            {
                ZeroMemory(*value, Len);
                wcscpy(*value, (PWSTR)val);
                bRet = TRUE;
            }
            else
            {
                DbgMsg(__FILE__, __LINE__, "M_ALLOC() ERROR %d\n", GetLastError());
            }
free:
            pIDOMAttrNode->Release();
            pIDOMAttrNode = NULL;
        }

        pIXMLDOMNamedNodeMap->Release();
        pIXMLDOMNamedNodeMap = NULL;
    }

    return bRet;
}
Пример #30
0
BSTR SettingsXML::GetAttr(IXMLDOMNode* apNode, IXMLDOMNamedNodeMap* apAttrs, const wchar_t* asName)
{
	HRESULT hr = S_OK;
	IXMLDOMNode *pValue = NULL;
	BSTR bsText = NULL;
	bsText = ::SysAllocString(asName);
	hr = apAttrs->getNamedItem(bsText, &pValue);
	::SysFreeString(bsText); bsText = NULL;

	if (SUCCEEDED(hr) && pValue)
	{
		hr = pValue->get_text(&bsText);
		pValue->Release(); pValue = NULL;
	}

	return bsText;
}