109 lines
3.6 KiB
C
109 lines
3.6 KiB
C
|
#ifndef __XMLUTIL_
|
||
|
#define __XMLUTIL_
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
inline BOOL CompareNoCase(LPCWSTR lpsz1, LPCWSTR lpsz2)
|
||
|
{
|
||
|
if ((lpsz1 == NULL) && (lpsz2 == NULL))
|
||
|
return TRUE;
|
||
|
|
||
|
if ((lpsz1 == NULL) || (lpsz2 == NULL))
|
||
|
return FALSE;
|
||
|
|
||
|
return (wcscmp(lpsz1, lpsz2) == 0);
|
||
|
}
|
||
|
|
||
|
inline BOOL CompareXMLTags(LPCWSTR lpsz1, LPCWSTR lpsz2)
|
||
|
{
|
||
|
return CompareNoCase(lpsz1, lpsz2);
|
||
|
}
|
||
|
|
||
|
|
||
|
// helpers for encoding and decoding of C++
|
||
|
// data structures to and from XML PCDATA fields
|
||
|
HRESULT EncodeBlobToBSTR(BYTE* pBlob, ULONG nBytes, BSTR* pBstr);
|
||
|
HRESULT DecodeBSTRtoBlob(BSTR bstr, BYTE** ppByte, ULONG* pnBytes);
|
||
|
HRESULT DecodeBSTRtoStruct(BSTR bstr, BYTE* pByte, ULONG nBytes);
|
||
|
|
||
|
HRESULT EncodeBoolToBSTR(BOOL b, BSTR* pBstr);
|
||
|
HRESULT DecodeBSTRtoBool(BSTR bstr, BOOL* pb);
|
||
|
//HRESULT EncodeIntToBSTR(int n, BSTR* pBstr);
|
||
|
//HRESULT DecodeIntToBool(BSTR bstr, int* pN);
|
||
|
|
||
|
BOOL XMLIsNodeName(IXMLDOMNode* pXDN, LPCWSTR lpszName);
|
||
|
|
||
|
// helper functions to read XML nodes and convert to C++ data
|
||
|
HRESULT XML_GetNodeText(IXMLDOMNode* pXDN, BSTR* pBstr);
|
||
|
HRESULT XML_GetNodeStruct(IXMLDOMNode* pXDN, BYTE* pByte, ULONG nBytes);
|
||
|
HRESULT XML_GetNodeBlob(IXMLDOMNode* pXDN, BYTE** ppByte, ULONG* pnBytes);
|
||
|
HRESULT XML_GetNodeBOOL(IXMLDOMNode* pXDN, BOOL* pb);
|
||
|
HRESULT XML_GetNodeDWORD(IXMLDOMNode* pXDN, DWORD* pdw);
|
||
|
|
||
|
HRESULT XML_FindSubtreeNode(IXMLDOMNode* pXMLCurrentRootNode,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
IXMLDOMNode** ppXMLNode);
|
||
|
|
||
|
// debugging helper function
|
||
|
void XML_PrintTreeRaw(IXMLDOMNode* pXDN, int nLevel);
|
||
|
void PrintIdentation(int iLevel);
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
HRESULT XML_CreateDOMNode(IXMLDOMDocument* pDoc,
|
||
|
DOMNodeType type, LPCWSTR lpszName,
|
||
|
IXMLDOMNode** ppXMLDOMNode);
|
||
|
|
||
|
HRESULT XML_AppendChildDOMNode(IXMLDOMNode* pXMLContainerNode,
|
||
|
IXMLDOMNode* pXMLChildNode);
|
||
|
|
||
|
// helper functions to write C++ data to XML nodes
|
||
|
HRESULT XML_CreateTextDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
LPCWSTR lpszNodeData,
|
||
|
IXMLDOMNode** ppNode);
|
||
|
|
||
|
HRESULT XML_CreateStructDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
BYTE* pByte, ULONG nBytes,
|
||
|
IXMLDOMNode** ppNode);
|
||
|
|
||
|
HRESULT XML_CreateBOOLDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
BOOL b,
|
||
|
IXMLDOMNode** ppNode);
|
||
|
|
||
|
HRESULT XML_CreateDWORDDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
DWORD dwVal,
|
||
|
IXMLDOMNode** ppNode);
|
||
|
|
||
|
|
||
|
// helpers to append a node to an XML document
|
||
|
HRESULT XML_AppendTextDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
IXMLDOMNode* pXMLNode,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
LPCWSTR lpszNodeData);
|
||
|
|
||
|
HRESULT XML_AppendBOOLDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
IXMLDOMNode* pXMLNode,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
BOOL b);
|
||
|
|
||
|
HRESULT XML_AppendStructDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
IXMLDOMNode* pXMLNode,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
BYTE* pByte,
|
||
|
ULONG nBytes);
|
||
|
|
||
|
HRESULT XML_AppendDWORDDataNode(IXMLDOMDocument* pXMLDoc,
|
||
|
IXMLDOMNode* pXMLNode,
|
||
|
LPCWSTR lpszNodeTag,
|
||
|
DWORD dwVal);
|
||
|
|
||
|
#endif // __XMLUTIL_
|