blob: 194ea899d1496f08b5da812c5263dc8c3c0954df [file] [log] [blame]
Mike McCormack3b5c2222005-08-03 10:58:47 +00001/*
2 * DOM Document implementation
3 *
4 * Copyright 2005 Mike McCormack
5 *
Huw Daviesd1b21b52005-11-08 12:46:43 +00006 * This library is free software; you can redistribute it and/or
Mike McCormack3b5c2222005-08-03 10:58:47 +00007 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
Huw Daviesd1b21b52005-11-08 12:46:43 +000011 * This library is distributed in the hope that it will be useful,
Mike McCormack3b5c2222005-08-03 10:58:47 +000012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#define COBJMACROS
22
23#include "config.h"
24
25#include <stdarg.h>
26#include "windef.h"
27#include "winbase.h"
28#include "winuser.h"
29#include "ole2.h"
Huw Davies5b8be5d2005-11-08 19:59:36 +000030#include "msxml2.h"
Mike McCormack3b5c2222005-08-03 10:58:47 +000031
32#include "msxml_private.h"
33
34#include "wine/debug.h"
35
36WINE_DEFAULT_DEBUG_CHANNEL(msxml);
37
Jacek Caban049e9b62005-08-08 12:13:31 +000038#ifdef HAVE_LIBXML2
39
Mike McCormack3b5c2222005-08-03 10:58:47 +000040typedef struct _domelem
41{
42 const struct IXMLDOMElementVtbl *lpVtbl;
43 LONG ref;
Huw Davies3f6bb982005-12-01 18:46:42 +010044 IUnknown *node_unk;
Mike McCormack65293d82005-08-10 09:54:22 +000045 IXMLDOMNode *node;
Mike McCormack3b5c2222005-08-03 10:58:47 +000046} domelem;
47
48static inline domelem *impl_from_IXMLDOMElement( IXMLDOMElement *iface )
49{
50 return (domelem *)((char*)iface - FIELD_OFFSET(domelem, lpVtbl));
51}
52
Mike McCormack23f192d2005-08-18 10:48:13 +000053static inline xmlNodePtr get_element( domelem *This )
54{
55 return xmlNodePtr_from_domnode( This->node, XML_ELEMENT_NODE );
56}
57
Mike McCormack3b5c2222005-08-03 10:58:47 +000058static HRESULT WINAPI domelem_QueryInterface(
59 IXMLDOMElement *iface,
60 REFIID riid,
61 void** ppvObject )
62{
Huw Davies3f6bb982005-12-01 18:46:42 +010063 domelem *This = impl_from_IXMLDOMElement( iface );
64 TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
Mike McCormack3b5c2222005-08-03 10:58:47 +000065
66 if ( IsEqualGUID( riid, &IID_IXMLDOMElement ) ||
Huw Davies3f6bb982005-12-01 18:46:42 +010067 IsEqualGUID( riid, &IID_IUnknown ) )
Mike McCormack3b5c2222005-08-03 10:58:47 +000068 {
69 *ppvObject = iface;
70 }
Huw Davies3f6bb982005-12-01 18:46:42 +010071 else if ( IsEqualGUID( riid, &IID_IDispatch ) ||
72 IsEqualGUID( riid, &IID_IXMLDOMNode ) )
73 {
74 return IUnknown_QueryInterface(This->node_unk, riid, ppvObject);
75 }
Mike McCormack3b5c2222005-08-03 10:58:47 +000076 else
77 return E_NOINTERFACE;
78
79 IXMLDOMElement_AddRef( iface );
80
81 return S_OK;
82}
83
84static ULONG WINAPI domelem_AddRef(
85 IXMLDOMElement *iface )
86{
87 domelem *This = impl_from_IXMLDOMElement( iface );
88 return InterlockedIncrement( &This->ref );
89}
90
91static ULONG WINAPI domelem_Release(
92 IXMLDOMElement *iface )
93{
94 domelem *This = impl_from_IXMLDOMElement( iface );
95 ULONG ref;
96
97 ref = InterlockedDecrement( &This->ref );
98 if ( ref == 0 )
99 {
Huw Davies3f6bb982005-12-01 18:46:42 +0100100 IUnknown_Release( This->node_unk );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000101 HeapFree( GetProcessHeap(), 0, This );
102 }
103
104 return ref;
105}
106
107static HRESULT WINAPI domelem_GetTypeInfoCount(
108 IXMLDOMElement *iface,
109 UINT* pctinfo )
110{
111 FIXME("\n");
112 return E_NOTIMPL;
113}
114
115static HRESULT WINAPI domelem_GetTypeInfo(
116 IXMLDOMElement *iface,
117 UINT iTInfo, LCID lcid,
118 ITypeInfo** ppTInfo )
119{
120 FIXME("\n");
121 return E_NOTIMPL;
122}
123
124static HRESULT WINAPI domelem_GetIDsOfNames(
125 IXMLDOMElement *iface,
126 REFIID riid, LPOLESTR* rgszNames,
127 UINT cNames, LCID lcid, DISPID* rgDispId )
128{
129 FIXME("\n");
130 return E_NOTIMPL;
131}
132
133static HRESULT WINAPI domelem_Invoke(
134 IXMLDOMElement *iface,
135 DISPID dispIdMember, REFIID riid, LCID lcid,
136 WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
137 EXCEPINFO* pExcepInfo, UINT* puArgErr )
138{
139 FIXME("\n");
140 return E_NOTIMPL;
141}
142
143static HRESULT WINAPI domelem_get_nodeName(
144 IXMLDOMElement *iface,
145 BSTR* p )
146{
Mike McCormack23f192d2005-08-18 10:48:13 +0000147 domelem *This = impl_from_IXMLDOMElement( iface );
148 return IXMLDOMNode_get_nodeName( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000149}
150
151static HRESULT WINAPI domelem_get_nodeValue(
152 IXMLDOMElement *iface,
153 VARIANT* var1 )
154{
Mike McCormack23f192d2005-08-18 10:48:13 +0000155 domelem *This = impl_from_IXMLDOMElement( iface );
156 return IXMLDOMNode_get_nodeValue( This->node, var1 );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000157}
158
159static HRESULT WINAPI domelem_put_nodeValue(
160 IXMLDOMElement *iface,
161 VARIANT var1 )
162{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000163 domelem *This = impl_from_IXMLDOMElement( iface );
164 return IXMLDOMNode_put_nodeValue( This->node, var1 );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000165}
166
167static HRESULT WINAPI domelem_get_nodeType(
168 IXMLDOMElement *iface,
169 DOMNodeType* domNodeType )
170{
Mike McCormack23f192d2005-08-18 10:48:13 +0000171 domelem *This = impl_from_IXMLDOMElement( iface );
172 return IXMLDOMNode_get_nodeType( This->node, domNodeType );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000173}
174
175static HRESULT WINAPI domelem_get_parentNode(
176 IXMLDOMElement *iface,
177 IXMLDOMNode** parent )
178{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000179 domelem *This = impl_from_IXMLDOMElement( iface );
180 return IXMLDOMNode_get_parentNode( This->node, parent );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000181}
182
183static HRESULT WINAPI domelem_get_childNodes(
184 IXMLDOMElement *iface,
185 IXMLDOMNodeList** outList)
186{
Mike McCormack23f192d2005-08-18 10:48:13 +0000187 domelem *This = impl_from_IXMLDOMElement( iface );
188 return IXMLDOMNode_get_childNodes( This->node, outList );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000189}
190
191static HRESULT WINAPI domelem_get_firstChild(
192 IXMLDOMElement *iface,
193 IXMLDOMNode** domNode)
194{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000195 domelem *This = impl_from_IXMLDOMElement( iface );
196 return IXMLDOMNode_get_firstChild( This->node, domNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000197}
198
199static HRESULT WINAPI domelem_get_lastChild(
200 IXMLDOMElement *iface,
201 IXMLDOMNode** domNode)
202{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000203 domelem *This = impl_from_IXMLDOMElement( iface );
204 return IXMLDOMNode_get_lastChild( This->node, domNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000205}
206
207static HRESULT WINAPI domelem_get_previousSibling(
208 IXMLDOMElement *iface,
209 IXMLDOMNode** domNode)
210{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000211 domelem *This = impl_from_IXMLDOMElement( iface );
212 return IXMLDOMNode_get_previousSibling( This->node, domNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000213}
214
215static HRESULT WINAPI domelem_get_nextSibling(
216 IXMLDOMElement *iface,
217 IXMLDOMNode** domNode)
218{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000219 domelem *This = impl_from_IXMLDOMElement( iface );
220 return IXMLDOMNode_get_nextSibling( This->node, domNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000221}
222
223static HRESULT WINAPI domelem_get_attributes(
224 IXMLDOMElement *iface,
225 IXMLDOMNamedNodeMap** attributeMap)
226{
Mike McCormack23f192d2005-08-18 10:48:13 +0000227 domelem *This = impl_from_IXMLDOMElement( iface );
228 return IXMLDOMNode_get_attributes( This->node, attributeMap );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000229}
230
231static HRESULT WINAPI domelem_insertBefore(
232 IXMLDOMElement *iface,
233 IXMLDOMNode* newNode, VARIANT var1,
234 IXMLDOMNode** outOldNode)
235{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000236 domelem *This = impl_from_IXMLDOMElement( iface );
237 return IXMLDOMNode_insertBefore( This->node, newNode, var1, outOldNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000238}
239
240static HRESULT WINAPI domelem_replaceChild(
241 IXMLDOMElement *iface,
242 IXMLDOMNode* newNode,
243 IXMLDOMNode* oldNode,
244 IXMLDOMNode** outOldNode)
245{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000246 domelem *This = impl_from_IXMLDOMElement( iface );
247 return IXMLDOMNode_replaceChild( This->node, newNode, oldNode, outOldNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000248}
249
250static HRESULT WINAPI domelem_removeChild(
251 IXMLDOMElement *iface,
252 IXMLDOMNode* domNode, IXMLDOMNode** oldNode)
253{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000254 domelem *This = impl_from_IXMLDOMElement( iface );
255 return IXMLDOMNode_removeChild( This->node, domNode, oldNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000256}
257
258static HRESULT WINAPI domelem_appendChild(
259 IXMLDOMElement *iface,
260 IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
261{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000262 domelem *This = impl_from_IXMLDOMElement( iface );
263 return IXMLDOMNode_appendChild( This->node, newNode, outNewNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000264}
265
266static HRESULT WINAPI domelem_hasChildNodes(
267 IXMLDOMElement *iface,
268 VARIANT_BOOL* pbool)
269{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000270 domelem *This = impl_from_IXMLDOMElement( iface );
271 return IXMLDOMNode_hasChildNodes( This->node, pbool );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000272}
273
274static HRESULT WINAPI domelem_get_ownerDocument(
275 IXMLDOMElement *iface,
276 IXMLDOMDocument** domDocument)
277{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000278 domelem *This = impl_from_IXMLDOMElement( iface );
279 return IXMLDOMNode_get_ownerDocument( This->node, domDocument );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000280}
281
282static HRESULT WINAPI domelem_cloneNode(
283 IXMLDOMElement *iface,
284 VARIANT_BOOL pbool, IXMLDOMNode** outNode)
285{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000286 domelem *This = impl_from_IXMLDOMElement( iface );
287 return IXMLDOMNode_cloneNode( This->node, pbool, outNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000288}
289
290static HRESULT WINAPI domelem_get_nodeTypeString(
291 IXMLDOMElement *iface,
292 BSTR* p)
293{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000294 domelem *This = impl_from_IXMLDOMElement( iface );
295 return IXMLDOMNode_get_nodeTypeString( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000296}
297
298static HRESULT WINAPI domelem_get_text(
299 IXMLDOMElement *iface,
300 BSTR* p)
301{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000302 domelem *This = impl_from_IXMLDOMElement( iface );
303 return IXMLDOMNode_get_text( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000304}
305
306static HRESULT WINAPI domelem_put_text(
307 IXMLDOMElement *iface,
308 BSTR p)
309{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000310 domelem *This = impl_from_IXMLDOMElement( iface );
311 return IXMLDOMNode_put_text( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000312}
313
314static HRESULT WINAPI domelem_get_specified(
315 IXMLDOMElement *iface,
316 VARIANT_BOOL* pbool)
317{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000318 domelem *This = impl_from_IXMLDOMElement( iface );
319 return IXMLDOMNode_get_specified( This->node, pbool );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000320}
321
322static HRESULT WINAPI domelem_get_definition(
323 IXMLDOMElement *iface,
324 IXMLDOMNode** domNode)
325{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000326 domelem *This = impl_from_IXMLDOMElement( iface );
327 return IXMLDOMNode_get_definition( This->node, domNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000328}
329
330static HRESULT WINAPI domelem_get_nodeTypedValue(
331 IXMLDOMElement *iface,
332 VARIANT* var1)
333{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000334 domelem *This = impl_from_IXMLDOMElement( iface );
335 return IXMLDOMNode_get_nodeTypedValue( This->node, var1 );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000336}
337
338static HRESULT WINAPI domelem_put_nodeTypedValue(
339 IXMLDOMElement *iface,
340 VARIANT var1)
341{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000342 domelem *This = impl_from_IXMLDOMElement( iface );
343 return IXMLDOMNode_put_nodeTypedValue( This->node, var1 );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000344}
345
346static HRESULT WINAPI domelem_get_dataType(
347 IXMLDOMElement *iface,
348 VARIANT* var1)
349{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000350 domelem *This = impl_from_IXMLDOMElement( iface );
351 return IXMLDOMNode_get_dataType( This->node, var1 );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000352}
353
354static HRESULT WINAPI domelem_put_dataType(
355 IXMLDOMElement *iface,
356 BSTR p)
357{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000358 domelem *This = impl_from_IXMLDOMElement( iface );
359 return IXMLDOMNode_put_dataType( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000360}
361
362static HRESULT WINAPI domelem_get_xml(
363 IXMLDOMElement *iface,
364 BSTR* p)
365{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000366 domelem *This = impl_from_IXMLDOMElement( iface );
367 return IXMLDOMNode_get_xml( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000368}
369
370static HRESULT WINAPI domelem_transformNode(
371 IXMLDOMElement *iface,
372 IXMLDOMNode* domNode, BSTR* p)
373{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000374 domelem *This = impl_from_IXMLDOMElement( iface );
375 return IXMLDOMNode_transformNode( This->node, domNode, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000376}
377
378static HRESULT WINAPI domelem_selectNodes(
379 IXMLDOMElement *iface,
380 BSTR p, IXMLDOMNodeList** outList)
381{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000382 domelem *This = impl_from_IXMLDOMElement( iface );
383 return IXMLDOMNode_selectNodes( This->node, p, outList );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000384}
385
386static HRESULT WINAPI domelem_selectSingleNode(
387 IXMLDOMElement *iface,
388 BSTR p, IXMLDOMNode** outNode)
389{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000390 domelem *This = impl_from_IXMLDOMElement( iface );
391 return IXMLDOMNode_selectSingleNode( This->node, p, outNode );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000392}
393
394static HRESULT WINAPI domelem_get_parsed(
395 IXMLDOMElement *iface,
396 VARIANT_BOOL* pbool)
397{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000398 domelem *This = impl_from_IXMLDOMElement( iface );
399 return IXMLDOMNode_get_parsed( This->node, pbool );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000400}
401
402static HRESULT WINAPI domelem_get_namespaceURI(
403 IXMLDOMElement *iface,
404 BSTR* p)
405{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000406 domelem *This = impl_from_IXMLDOMElement( iface );
407 return IXMLDOMNode_get_namespaceURI( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000408}
409
410static HRESULT WINAPI domelem_get_prefix(
411 IXMLDOMElement *iface,
412 BSTR* p)
413{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000414 domelem *This = impl_from_IXMLDOMElement( iface );
415 return IXMLDOMNode_get_prefix( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000416}
417
418static HRESULT WINAPI domelem_get_baseName(
419 IXMLDOMElement *iface,
420 BSTR* p)
421{
Mike McCormack23f192d2005-08-18 10:48:13 +0000422 domelem *This = impl_from_IXMLDOMElement( iface );
423 return IXMLDOMNode_get_baseName( This->node, p );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000424}
425
426static HRESULT WINAPI domelem_transformNodeToObject(
427 IXMLDOMElement *iface,
428 IXMLDOMNode* domNode, VARIANT var1)
429{
Mike McCormackd61f8f82005-08-22 09:23:52 +0000430 domelem *This = impl_from_IXMLDOMElement( iface );
431 return IXMLDOMNode_transformNodeToObject( This->node, domNode, var1 );
Mike McCormack3b5c2222005-08-03 10:58:47 +0000432}
433
434static HRESULT WINAPI domelem_get_tagName(
435 IXMLDOMElement *iface,
436 BSTR* p)
437{
Mike McCormack77392f22005-08-11 10:57:58 +0000438 domelem *This = impl_from_IXMLDOMElement( iface );
439 xmlNodePtr element;
440
441 TRACE("%p\n", This );
442
443 if ( !This->node )
444 return E_FAIL;
445
Mike McCormack23f192d2005-08-18 10:48:13 +0000446 element = get_element( This );
Mike McCormack77392f22005-08-11 10:57:58 +0000447 if ( !element )
448 return E_FAIL;
449
450 *p = bstr_from_xmlChar( element->name );
451
452 return S_OK;
Mike McCormack3b5c2222005-08-03 10:58:47 +0000453}
454
455static HRESULT WINAPI domelem_getAttribute(
456 IXMLDOMElement *iface,
457 BSTR p, VARIANT* var)
458{
459 FIXME("\n");
460 return E_NOTIMPL;
461}
462
463static HRESULT WINAPI domelem_setAttribute(
464 IXMLDOMElement *iface,
465 BSTR p, VARIANT var)
466{
467 FIXME("\n");
468 return E_NOTIMPL;
469}
470
471static HRESULT WINAPI domelem_removeAttribute(
472 IXMLDOMElement *iface,
473 BSTR p)
474{
475 FIXME("\n");
476 return E_NOTIMPL;
477}
478
479static HRESULT WINAPI domelem_getAttributeNode(
480 IXMLDOMElement *iface,
481 BSTR p, IXMLDOMAttribute** attributeNode )
482{
483 FIXME("\n");
484 return E_NOTIMPL;
485}
486
487static HRESULT WINAPI domelem_setAttributeNode(
488 IXMLDOMElement *iface,
489 IXMLDOMAttribute* domAttribute,
490 IXMLDOMAttribute** attributeNode)
491{
492 FIXME("\n");
493 return E_NOTIMPL;
494}
495
496static HRESULT WINAPI domelem_removeAttributeNode(
497 IXMLDOMElement *iface,
498 IXMLDOMAttribute* domAttribute,
499 IXMLDOMAttribute** attributeNode)
500{
501 FIXME("\n");
502 return E_NOTIMPL;
503}
504
505static HRESULT WINAPI domelem_getElementsByTagName(
506 IXMLDOMElement *iface,
507 BSTR p, IXMLDOMNodeList** resultList)
508{
509 FIXME("\n");
510 return E_NOTIMPL;
511}
512
513static HRESULT WINAPI domelem_normalize(
514 IXMLDOMElement *iface )
515{
516 FIXME("\n");
517 return E_NOTIMPL;
518}
519
Mike McCormack67630652005-08-08 15:04:00 +0000520static const struct IXMLDOMElementVtbl domelem_vtbl =
Mike McCormack3b5c2222005-08-03 10:58:47 +0000521{
522 domelem_QueryInterface,
523 domelem_AddRef,
524 domelem_Release,
525 domelem_GetTypeInfoCount,
526 domelem_GetTypeInfo,
527 domelem_GetIDsOfNames,
528 domelem_Invoke,
529 domelem_get_nodeName,
530 domelem_get_nodeValue,
531 domelem_put_nodeValue,
532 domelem_get_nodeType,
533 domelem_get_parentNode,
534 domelem_get_childNodes,
535 domelem_get_firstChild,
536 domelem_get_lastChild,
537 domelem_get_previousSibling,
538 domelem_get_nextSibling,
539 domelem_get_attributes,
540 domelem_insertBefore,
541 domelem_replaceChild,
542 domelem_removeChild,
543 domelem_appendChild,
544 domelem_hasChildNodes,
545 domelem_get_ownerDocument,
546 domelem_cloneNode,
547 domelem_get_nodeTypeString,
548 domelem_get_text,
549 domelem_put_text,
550 domelem_get_specified,
551 domelem_get_definition,
552 domelem_get_nodeTypedValue,
553 domelem_put_nodeTypedValue,
554 domelem_get_dataType,
555 domelem_put_dataType,
556 domelem_get_xml,
557 domelem_transformNode,
558 domelem_selectNodes,
559 domelem_selectSingleNode,
560 domelem_get_parsed,
561 domelem_get_namespaceURI,
562 domelem_get_prefix,
563 domelem_get_baseName,
564 domelem_transformNodeToObject,
565 domelem_get_tagName,
566 domelem_getAttribute,
567 domelem_setAttribute,
568 domelem_removeAttribute,
569 domelem_getAttributeNode,
570 domelem_setAttributeNode,
571 domelem_removeAttributeNode,
572 domelem_getElementsByTagName,
573 domelem_normalize,
574};
575
Huw Davies3f6bb982005-12-01 18:46:42 +0100576IUnknown* create_element( xmlNodePtr element )
Mike McCormack3b5c2222005-08-03 10:58:47 +0000577{
Mike McCormack65293d82005-08-10 09:54:22 +0000578 domelem *This;
Huw Davies3f6bb982005-12-01 18:46:42 +0100579 HRESULT hr;
Mike McCormack3b5c2222005-08-03 10:58:47 +0000580
Mike McCormack65293d82005-08-10 09:54:22 +0000581 This = HeapAlloc( GetProcessHeap(), 0, sizeof *This );
582 if ( !This )
583 return NULL;
Mike McCormack3b5c2222005-08-03 10:58:47 +0000584
Mike McCormack65293d82005-08-10 09:54:22 +0000585 This->lpVtbl = &domelem_vtbl;
Mike McCormack65293d82005-08-10 09:54:22 +0000586 This->ref = 1;
Mike McCormack3b5c2222005-08-03 10:58:47 +0000587
Huw Davies3f6bb982005-12-01 18:46:42 +0100588 This->node_unk = create_basic_node( element, (IUnknown*)&This->lpVtbl );
589 if(!This->node_unk)
Mike McCormack65293d82005-08-10 09:54:22 +0000590 {
Huw Davies3f6bb982005-12-01 18:46:42 +0100591 HeapFree(GetProcessHeap(), 0, This);
Mike McCormack65293d82005-08-10 09:54:22 +0000592 return NULL;
593 }
Mike McCormack3b5c2222005-08-03 10:58:47 +0000594
Huw Davies3f6bb982005-12-01 18:46:42 +0100595 hr = IUnknown_QueryInterface(This->node_unk, &IID_IXMLDOMNode, (LPVOID*)&This->node);
596 if(FAILED(hr))
597 {
598 IUnknown_Release(This->node_unk);
599 HeapFree( GetProcessHeap(), 0, This );
600 return NULL;
601 }
602 /* The ref on This->node is actually looped back into this object, so release it */
603 IXMLDOMNode_Release(This->node);
604
605 return (IUnknown*) &This->lpVtbl;
Mike McCormack3b5c2222005-08-03 10:58:47 +0000606}
Jacek Caban049e9b62005-08-08 12:13:31 +0000607
608#endif