1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright 1998 - 2005 Microsoft Corporation. All Rights Reserved.
//
// FILE: xmlhandler.hxx
//
//
// PURPOSE: Helper Class that handles all functionality related to
// processing of input PrintTicket/PrintCapabilities XML document
//
//
#pragma once
//
// Print ticket handler class that performs all XML handling for the
// sample code
//
class OEMPTXMLHandler
{
public:
OEMPTXMLHandler();
virtual ~OEMPTXMLHandler();
HRESULT SetRoot(
_In_ IXMLDOMDocument2 *pRoot,
_In_ IPrintCoreHelper *pHelper
);
//
// Node creation methods
//
HRESULT CreateFeatureNode(
_In_opt_ IXMLDOMElement *pParent,
_In_ PCWSTR pszNamespaceURI,
_In_ PCWSTR pszFeatureName,
_Out_opt_ IXMLDOMElement **ppFeatureNode
);
HRESULT CreateOptionNode(
_In_ IXMLDOMElement *pParent,
_In_ PCWSTR pszNamespaceURI,
_In_ PCWSTR pszOptionName,
_Out_opt_ IXMLDOMElement **ppOptionElement
);
//
// Get methods
//
HRESULT GetXMLAttribute(
_In_ IXMLDOMElement *pElement,
_Outptr_result_maybenull_ BSTR *pszAttrNamespaceURI,
_Outptr_result_maybenull_ BSTR *pszAttrName
) const;
HRESULT GetFeatureNode(
_In_opt_ IXMLDOMElement *pParent,
_In_ PCWSTR pszAttrNamespaceURI,
_In_ PCWSTR pszAttrName,
_Out_ _When_(return == S_FALSE, _At_(*ppElement, _Post_maybenull_))
_When_(return != S_FALSE, _At_(*ppElement, _Post_valid_))
IXMLDOMElement **ppElement
) const;
HRESULT GetOptionNode(
_In_ IXMLDOMElement *pParent,
_Outptr_result_maybenull_ IXMLDOMElement **ppElement
) const;
HRESULT DeleteFeatureNode(
_In_opt_ IXMLDOMNode *pParent,
_In_ IXMLDOMNode *pElement
);
private:
IXMLDOMDocument2 *m_pRootDocument;
IXMLDOMElement *m_pRootElement;
IMXNamespaceManager *m_pNSManager;
DWORD m_dwNextIndex;
HRESULT GetXMLElement(
_In_ IXMLDOMElement *pParent,
_In_ PCWSTR pszElementNamespaceURI,
_In_ PCWSTR pszElementName,
_In_ PCWSTR pszAttrNamespaceURI,
_In_ PCWSTR pszAttrName,
_Outptr_result_maybenull_ IXMLDOMElement **ppElement
) const;
HRESULT GetXMLElementWithoutAttribute(
_In_ IXMLDOMElement *pContext,
_In_ PCWSTR pszElementNamespaceURI,
_In_ PCWSTR pszElementName,
_Outptr_result_maybenull_ IXMLDOMElement **ppChildElement
) const;
HRESULT getPrefix(
_In_ IXMLDOMElement *pContext,
_In_ PCWSTR pszUri,
_Outptr_opt_result_maybenull_ BSTR *pbstrPrefix
) const;
HRESULT declarePrefix(
_In_ IXMLDOMElement *pContext,
_In_ LPCWSTR pszUri,
_In_opt_ LPCWSTR pszPreferredPrefix,
_Out_ BSTR *newPrefix
);
HRESULT CreateQName(
_In_ IXMLDOMElement *pElement,
_In_ PCWSTR pszUri,
_In_ PCWSTR pszLocalName,
_Out_ BSTR *pQName
);
//
// Adds attributes to existing XML element
//
HRESULT CreateXMLAttribute(
_In_ IXMLDOMElement *pElement,
_In_ PCWSTR pszAttributeName,
_In_ PCWSTR pszNamespaceURI,
_In_ PCWSTR pszAttributeValue
);
//
// Creates new XML element node
//
HRESULT CreateXMLElement(
_In_ IXMLDOMElement *pParent,
_In_ PCWSTR pszElementName,
_In_ PCWSTR pszNamespaceURI,
_Out_ IXMLDOMElement **ppCreatedElement
);
//
// Helpers
//
HRESULT getLocalName(
_In_ PCWSTR pszQName,
_Out_ BSTR *ppbstrLocalName
) const;
HRESULT getUri(
IXMLDOMElement *pContext,
_In_ PCWSTR pszQName,
_Out_ BSTR *pbstrURI
) const;
};
|