200 lines
6.3 KiB
C
200 lines
6.3 KiB
C
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1999.
|
|
//
|
|
// File: ncxml.h
|
|
//
|
|
// Contents: helper functions for doing remarkably simple things
|
|
// with the XML DOM.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef __NCXML_H_
|
|
#define __NCXML_H_
|
|
|
|
/*
|
|
* Enum SST_DATA_TYPE
|
|
*
|
|
* Possible types of state variables
|
|
*/
|
|
|
|
enum SST_DATA_TYPE // Type returned by msxml
|
|
{ // ----------------------
|
|
SDT_STRING = 0, // VT_BSTR
|
|
SDT_NUMBER, // VT_BSTR
|
|
SDT_INT, // VT_I4
|
|
SDT_FIXED_14_4, // VT_CY
|
|
SDT_BOOLEAN, // VT_BOOL
|
|
SDT_DATETIME_ISO8601, // VT_DATE
|
|
SDT_DATETIME_ISO8601TZ, // VT_DATE
|
|
SDT_DATE_ISO8601, // VT_DATE
|
|
SDT_TIME_ISO8601, // VT_DATE
|
|
SDT_TIME_ISO8601TZ, // VT_DATE
|
|
SDT_I1, // VT_I1
|
|
SDT_I2, // VT_I2
|
|
SDT_I4, // VT_I4
|
|
SDT_UI1, // VT_UI1
|
|
SDT_UI2, // VT_UI2
|
|
SDT_UI4, // VT_UI4
|
|
SDT_R4, // VT_FLOAT
|
|
SDT_R8, // VT_DOUBLE
|
|
SDT_FLOAT, // VT_DOUBLE
|
|
SDT_UUID, // VT_BSTR
|
|
SDT_BIN_BASE64, // VT_ARRAY
|
|
SDT_BIN_HEX, // VT_ARRAY
|
|
SDT_CHAR, // VT_UI2 (a wchar)
|
|
SDT_URI, // VT_BSTR
|
|
//
|
|
// note(cmr): ADD NEW VALUES IMMEDIATELY BEFORE THIS COMMENT
|
|
//
|
|
SDT_INVALID
|
|
};
|
|
|
|
// Reading values from elements
|
|
|
|
HRESULT HrGetTypedValueFromElement(IXMLDOMNode * pxdn,
|
|
CONST LPCWSTR pszDataType,
|
|
VARIANT * pvarOut);
|
|
|
|
HRESULT HrGetTypedValueFromChildElement(IXMLDOMNode * pxdn,
|
|
CONST LPCWSTR * arypszTokens,
|
|
CONST ULONG cTokens,
|
|
CONST LPCWSTR pszDataType,
|
|
VARIANT * pvarOut);
|
|
|
|
HRESULT HrGetTextValueFromElement(IXMLDOMNode * pxdn,
|
|
BSTR * pbstrOut);
|
|
|
|
HRESULT HrGetTextValueFromChildElement(IXMLDOMNode * pxde,
|
|
const LPCWSTR * arypszTokens,
|
|
const ULONG cTokens,
|
|
BSTR * pbstrOut);
|
|
|
|
|
|
// Navigating the tree
|
|
|
|
BOOL FIsThisTheNodeName(IXMLDOMNode * pxdn,
|
|
LPCWSTR pszNodeName);
|
|
|
|
BOOL
|
|
FIsThisTheNodeNameWithNamespace(IXMLDOMNode * pxdn,
|
|
LPCWSTR pszNodeName,
|
|
LPCWSTR pszNamespaceURI);
|
|
|
|
BOOL
|
|
FIsThisTheNodeTextValue(
|
|
IN IXMLDOMNode * pxdn,
|
|
IN LPCWSTR cszTextValue);
|
|
|
|
BOOL
|
|
FAreNodeValuesEqual(
|
|
IN IXMLDOMNode * pxdn1,
|
|
IN IXMLDOMNode * pxdn2);
|
|
|
|
HRESULT
|
|
HrAreThereDuplicatesInChildNodeTextValues(
|
|
IN IXMLDOMNode * pxdn,
|
|
IN LPCWSTR cszXSLPattern,
|
|
IN BOOL fCaseSensitive,
|
|
OUT BOOL * pfDuplicatesExist);
|
|
|
|
|
|
HRESULT HrGetFirstChildElement(IXMLDOMNode * pxdn,
|
|
LPCWSTR pszNodeName,
|
|
IXMLDOMNode ** ppxdn);
|
|
|
|
HRESULT HrGetNextChildElement(IXMLDOMNode * pxdnLastChild,
|
|
LPCWSTR pszNodeName,
|
|
IXMLDOMNode ** ppxde);
|
|
|
|
HRESULT HrGetNestedChildElement(IXMLDOMNode * pxdeRoot,
|
|
const LPCWSTR * arypszTokens,
|
|
const ULONG cTokens,
|
|
IXMLDOMNode ** ppxde);
|
|
|
|
|
|
// Parsing nodes
|
|
|
|
struct DevicePropertiesParsingStruct
|
|
{
|
|
BOOL m_fOptional;
|
|
BOOL m_fIsUrl;
|
|
BOOL m_fValidateUrl;
|
|
LPCWSTR m_pszTagName;
|
|
};
|
|
|
|
HRESULT HrAreElementTagsValid(IXMLDOMNode *pxdnRoot,
|
|
const ULONG cElems,
|
|
const DevicePropertiesParsingStruct dppsInfo []);
|
|
|
|
HRESULT HrIsElementPresentOnce(IXMLDOMNode * pxdnRoot,
|
|
LPCWSTR pszNodeName );
|
|
|
|
HRESULT HrCheckForDuplicateElement(IXMLDOMNode * pxdnRoot,
|
|
LPCWSTR pszNodeName );
|
|
|
|
HRESULT HrReadElementWithParseData (IXMLDOMNode * pxdn,
|
|
const ULONG cElems,
|
|
const DevicePropertiesParsingStruct dppsInfo [],
|
|
LPCWSTR pszBaseUrl,
|
|
LPWSTR arypszReadValues []);
|
|
|
|
BOOL fAreReadValuesComplete (const ULONG cElems,
|
|
const DevicePropertiesParsingStruct dppsInfo [],
|
|
const LPCWSTR arypszReadValues []);
|
|
|
|
|
|
HRESULT
|
|
HrGetTextValueFromAttribute(
|
|
IN IXMLDOMNode * pxdn,
|
|
IN LPCWSTR szAttrName,
|
|
OUT BSTR * pbstrAttrValue);
|
|
|
|
|
|
// Creating nodes
|
|
|
|
HRESULT HrSetTextAttribute(IXMLDOMElement * pElement,
|
|
LPCWSTR pcwszAttrName,
|
|
LPCWSTR pcwszValue);
|
|
|
|
HRESULT HrCreateElementWithType(IN IXMLDOMDocument * pDoc,
|
|
IN LPCWSTR pcwszElementName,
|
|
IN LPCWSTR pszDataType,
|
|
IN VARIANT varData,
|
|
OUT IXMLDOMElement ** ppElement);
|
|
|
|
|
|
HRESULT HrCreateElementWithTextValue(IN IXMLDOMDocument * pDoc,
|
|
IN LPCWSTR pcwszElementName,
|
|
IN LPCWSTR pcwszTextValue,
|
|
OUT IXMLDOMElement ** ppElement);
|
|
|
|
HRESULT HrCreateElement(
|
|
IN IXMLDOMDocument * pxdd,
|
|
IN LPCWSTR pcwszElementName,
|
|
IN LPCWSTR pcwszNamespaceURI,
|
|
OUT IXMLDOMNode ** ppxdnNewElt);
|
|
|
|
HRESULT HrAppendProcessingInstruction(
|
|
IN IXMLDOMDocument * pxdd,
|
|
IN LPCWSTR pcwszName,
|
|
IN LPCWSTR pcwszValue);
|
|
|
|
extern
|
|
LPCWSTR
|
|
GetStringFromType(CONST SST_DATA_TYPE sdt);
|
|
|
|
extern
|
|
SST_DATA_TYPE
|
|
GetTypeFromString(LPCWSTR pszTypeString);
|
|
|
|
extern
|
|
VARTYPE
|
|
GetVarTypeFromString(LPCWSTR pszTypeString);
|
|
|
|
|
|
|
|
#endif // __NCXML_H_
|