windows-nt/Source/XPSP1/NT/net/upnp/inc/ncxml.h
2020-09-26 16:20:57 +08:00

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_