Remove trailing backslash.
[wine.git] / dlls / msxml3 / element.c
blob9415ff6369326cfad52227fcd74649116abb2cca
1 /*
2 * DOM Document implementation
4 * Copyright 2005 Mike McCormack
6 * iface library is free software; you can redistribute it and/or
7 * 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.
11 * iface library is distributed in the hope that it will be useful,
12 * 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.
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
21 #define COBJMACROS
23 #include "config.h"
25 #include <stdarg.h>
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "ole2.h"
30 #include "ocidl.h"
31 #include "msxml.h"
32 #include "xmldom.h"
33 #include "msxml.h"
35 #include "msxml_private.h"
37 #include "wine/debug.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(msxml);
41 #ifdef HAVE_LIBXML2
43 typedef struct _domelem
45 const struct IXMLDOMElementVtbl *lpVtbl;
46 LONG ref;
47 IXMLDOMNode *node;
48 } domelem;
50 static inline domelem *impl_from_IXMLDOMElement( IXMLDOMElement *iface )
52 return (domelem *)((char*)iface - FIELD_OFFSET(domelem, lpVtbl));
55 static HRESULT WINAPI domelem_QueryInterface(
56 IXMLDOMElement *iface,
57 REFIID riid,
58 void** ppvObject )
60 TRACE("%p %p %p\n", iface, debugstr_guid(riid), ppvObject);
62 if ( IsEqualGUID( riid, &IID_IXMLDOMElement ) ||
63 IsEqualGUID( riid, &IID_IUnknown ) ||
64 IsEqualGUID( riid, &IID_IDispatch ) ||
65 IsEqualGUID( riid, &IID_IXMLDOMNode ) )
67 *ppvObject = iface;
69 else
70 return E_NOINTERFACE;
72 IXMLDOMElement_AddRef( iface );
74 return S_OK;
77 static ULONG WINAPI domelem_AddRef(
78 IXMLDOMElement *iface )
80 domelem *This = impl_from_IXMLDOMElement( iface );
81 return InterlockedIncrement( &This->ref );
84 static ULONG WINAPI domelem_Release(
85 IXMLDOMElement *iface )
87 domelem *This = impl_from_IXMLDOMElement( iface );
88 ULONG ref;
90 ref = InterlockedDecrement( &This->ref );
91 if ( ref == 0 )
93 IXMLDOMNode_Release( This->node );
94 HeapFree( GetProcessHeap(), 0, This );
97 return ref;
100 static HRESULT WINAPI domelem_GetTypeInfoCount(
101 IXMLDOMElement *iface,
102 UINT* pctinfo )
104 FIXME("\n");
105 return E_NOTIMPL;
108 static HRESULT WINAPI domelem_GetTypeInfo(
109 IXMLDOMElement *iface,
110 UINT iTInfo, LCID lcid,
111 ITypeInfo** ppTInfo )
113 FIXME("\n");
114 return E_NOTIMPL;
117 static HRESULT WINAPI domelem_GetIDsOfNames(
118 IXMLDOMElement *iface,
119 REFIID riid, LPOLESTR* rgszNames,
120 UINT cNames, LCID lcid, DISPID* rgDispId )
122 FIXME("\n");
123 return E_NOTIMPL;
126 static HRESULT WINAPI domelem_Invoke(
127 IXMLDOMElement *iface,
128 DISPID dispIdMember, REFIID riid, LCID lcid,
129 WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
130 EXCEPINFO* pExcepInfo, UINT* puArgErr )
132 FIXME("\n");
133 return E_NOTIMPL;
136 static HRESULT WINAPI domelem_get_nodeName(
137 IXMLDOMElement *iface,
138 BSTR* p )
140 FIXME("\n");
141 return E_NOTIMPL;
144 static HRESULT WINAPI domelem_get_nodeValue(
145 IXMLDOMElement *iface,
146 VARIANT* var1 )
148 FIXME("\n");
149 return E_NOTIMPL;
152 static HRESULT WINAPI domelem_put_nodeValue(
153 IXMLDOMElement *iface,
154 VARIANT var1 )
156 FIXME("\n");
157 return E_NOTIMPL;
160 static HRESULT WINAPI domelem_get_nodeType(
161 IXMLDOMElement *iface,
162 DOMNodeType* domNodeType )
164 FIXME("\n");
165 return E_NOTIMPL;
168 static HRESULT WINAPI domelem_get_parentNode(
169 IXMLDOMElement *iface,
170 IXMLDOMNode** parent )
172 FIXME("\n");
173 return E_NOTIMPL;
176 static HRESULT WINAPI domelem_get_childNodes(
177 IXMLDOMElement *iface,
178 IXMLDOMNodeList** outList)
180 FIXME("\n");
181 return E_NOTIMPL;
184 static HRESULT WINAPI domelem_get_firstChild(
185 IXMLDOMElement *iface,
186 IXMLDOMNode** domNode)
188 FIXME("\n");
189 return E_NOTIMPL;
192 static HRESULT WINAPI domelem_get_lastChild(
193 IXMLDOMElement *iface,
194 IXMLDOMNode** domNode)
196 FIXME("\n");
197 return E_NOTIMPL;
200 static HRESULT WINAPI domelem_get_previousSibling(
201 IXMLDOMElement *iface,
202 IXMLDOMNode** domNode)
204 FIXME("\n");
205 return E_NOTIMPL;
208 static HRESULT WINAPI domelem_get_nextSibling(
209 IXMLDOMElement *iface,
210 IXMLDOMNode** domNode)
212 FIXME("\n");
213 return E_NOTIMPL;
216 static HRESULT WINAPI domelem_get_attributes(
217 IXMLDOMElement *iface,
218 IXMLDOMNamedNodeMap** attributeMap)
220 FIXME("\n");
221 return E_NOTIMPL;
224 static HRESULT WINAPI domelem_insertBefore(
225 IXMLDOMElement *iface,
226 IXMLDOMNode* newNode, VARIANT var1,
227 IXMLDOMNode** outOldNode)
229 FIXME("\n");
230 return E_NOTIMPL;
233 static HRESULT WINAPI domelem_replaceChild(
234 IXMLDOMElement *iface,
235 IXMLDOMNode* newNode,
236 IXMLDOMNode* oldNode,
237 IXMLDOMNode** outOldNode)
239 FIXME("\n");
240 return E_NOTIMPL;
243 static HRESULT WINAPI domelem_removeChild(
244 IXMLDOMElement *iface,
245 IXMLDOMNode* domNode, IXMLDOMNode** oldNode)
247 FIXME("\n");
248 return E_NOTIMPL;
251 static HRESULT WINAPI domelem_appendChild(
252 IXMLDOMElement *iface,
253 IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
255 FIXME("\n");
256 return E_NOTIMPL;
259 static HRESULT WINAPI domelem_hasChildNodes(
260 IXMLDOMElement *iface,
261 VARIANT_BOOL* pbool)
263 FIXME("\n");
264 return E_NOTIMPL;
267 static HRESULT WINAPI domelem_get_ownerDocument(
268 IXMLDOMElement *iface,
269 IXMLDOMDocument** domDocument)
271 FIXME("\n");
272 return E_NOTIMPL;
275 static HRESULT WINAPI domelem_cloneNode(
276 IXMLDOMElement *iface,
277 VARIANT_BOOL pbool, IXMLDOMNode** outNode)
279 FIXME("\n");
280 return E_NOTIMPL;
283 static HRESULT WINAPI domelem_get_nodeTypeString(
284 IXMLDOMElement *iface,
285 BSTR* p)
287 FIXME("\n");
288 return E_NOTIMPL;
291 static HRESULT WINAPI domelem_get_text(
292 IXMLDOMElement *iface,
293 BSTR* p)
295 FIXME("\n");
296 return E_NOTIMPL;
299 static HRESULT WINAPI domelem_put_text(
300 IXMLDOMElement *iface,
301 BSTR p)
303 FIXME("\n");
304 return E_NOTIMPL;
307 static HRESULT WINAPI domelem_get_specified(
308 IXMLDOMElement *iface,
309 VARIANT_BOOL* pbool)
311 FIXME("\n");
312 return E_NOTIMPL;
315 static HRESULT WINAPI domelem_get_definition(
316 IXMLDOMElement *iface,
317 IXMLDOMNode** domNode)
319 FIXME("\n");
320 return E_NOTIMPL;
323 static HRESULT WINAPI domelem_get_nodeTypedValue(
324 IXMLDOMElement *iface,
325 VARIANT* var1)
327 FIXME("\n");
328 return E_NOTIMPL;
331 static HRESULT WINAPI domelem_put_nodeTypedValue(
332 IXMLDOMElement *iface,
333 VARIANT var1)
335 FIXME("\n");
336 return E_NOTIMPL;
339 static HRESULT WINAPI domelem_get_dataType(
340 IXMLDOMElement *iface,
341 VARIANT* var1)
343 FIXME("\n");
344 return E_NOTIMPL;
347 static HRESULT WINAPI domelem_put_dataType(
348 IXMLDOMElement *iface,
349 BSTR p)
351 FIXME("\n");
352 return E_NOTIMPL;
355 static HRESULT WINAPI domelem_get_xml(
356 IXMLDOMElement *iface,
357 BSTR* p)
359 FIXME("\n");
360 return E_NOTIMPL;
363 static HRESULT WINAPI domelem_transformNode(
364 IXMLDOMElement *iface,
365 IXMLDOMNode* domNode, BSTR* p)
367 FIXME("\n");
368 return E_NOTIMPL;
371 static HRESULT WINAPI domelem_selectNodes(
372 IXMLDOMElement *iface,
373 BSTR p, IXMLDOMNodeList** outList)
375 FIXME("\n");
376 return E_NOTIMPL;
379 static HRESULT WINAPI domelem_selectSingleNode(
380 IXMLDOMElement *iface,
381 BSTR p, IXMLDOMNode** outNode)
383 FIXME("\n");
384 return E_NOTIMPL;
387 static HRESULT WINAPI domelem_get_parsed(
388 IXMLDOMElement *iface,
389 VARIANT_BOOL* pbool)
391 FIXME("\n");
392 return E_NOTIMPL;
395 static HRESULT WINAPI domelem_get_namespaceURI(
396 IXMLDOMElement *iface,
397 BSTR* p)
399 FIXME("\n");
400 return E_NOTIMPL;
403 static HRESULT WINAPI domelem_get_prefix(
404 IXMLDOMElement *iface,
405 BSTR* p)
407 FIXME("\n");
408 return E_NOTIMPL;
411 static HRESULT WINAPI domelem_get_baseName(
412 IXMLDOMElement *iface,
413 BSTR* p)
415 FIXME("\n");
416 return E_NOTIMPL;
419 static HRESULT WINAPI domelem_transformNodeToObject(
420 IXMLDOMElement *iface,
421 IXMLDOMNode* domNode, VARIANT var1)
423 FIXME("\n");
424 return E_NOTIMPL;
427 static HRESULT WINAPI domelem_get_tagName(
428 IXMLDOMElement *iface,
429 BSTR* p)
431 domelem *This = impl_from_IXMLDOMElement( iface );
432 xmlNodePtr element;
434 TRACE("%p\n", This );
436 if ( !This->node )
437 return E_FAIL;
439 element = xmlelement_from_xmlnode( This->node );
440 if ( !element )
441 return E_FAIL;
443 *p = bstr_from_xmlChar( element->name );
445 return S_OK;
448 static HRESULT WINAPI domelem_getAttribute(
449 IXMLDOMElement *iface,
450 BSTR p, VARIANT* var)
452 FIXME("\n");
453 return E_NOTIMPL;
456 static HRESULT WINAPI domelem_setAttribute(
457 IXMLDOMElement *iface,
458 BSTR p, VARIANT var)
460 FIXME("\n");
461 return E_NOTIMPL;
464 static HRESULT WINAPI domelem_removeAttribute(
465 IXMLDOMElement *iface,
466 BSTR p)
468 FIXME("\n");
469 return E_NOTIMPL;
472 static HRESULT WINAPI domelem_getAttributeNode(
473 IXMLDOMElement *iface,
474 BSTR p, IXMLDOMAttribute** attributeNode )
476 FIXME("\n");
477 return E_NOTIMPL;
480 static HRESULT WINAPI domelem_setAttributeNode(
481 IXMLDOMElement *iface,
482 IXMLDOMAttribute* domAttribute,
483 IXMLDOMAttribute** attributeNode)
485 FIXME("\n");
486 return E_NOTIMPL;
489 static HRESULT WINAPI domelem_removeAttributeNode(
490 IXMLDOMElement *iface,
491 IXMLDOMAttribute* domAttribute,
492 IXMLDOMAttribute** attributeNode)
494 FIXME("\n");
495 return E_NOTIMPL;
498 static HRESULT WINAPI domelem_getElementsByTagName(
499 IXMLDOMElement *iface,
500 BSTR p, IXMLDOMNodeList** resultList)
502 FIXME("\n");
503 return E_NOTIMPL;
506 static HRESULT WINAPI domelem_normalize(
507 IXMLDOMElement *iface )
509 FIXME("\n");
510 return E_NOTIMPL;
513 static const struct IXMLDOMElementVtbl domelem_vtbl =
515 domelem_QueryInterface,
516 domelem_AddRef,
517 domelem_Release,
518 domelem_GetTypeInfoCount,
519 domelem_GetTypeInfo,
520 domelem_GetIDsOfNames,
521 domelem_Invoke,
522 domelem_get_nodeName,
523 domelem_get_nodeValue,
524 domelem_put_nodeValue,
525 domelem_get_nodeType,
526 domelem_get_parentNode,
527 domelem_get_childNodes,
528 domelem_get_firstChild,
529 domelem_get_lastChild,
530 domelem_get_previousSibling,
531 domelem_get_nextSibling,
532 domelem_get_attributes,
533 domelem_insertBefore,
534 domelem_replaceChild,
535 domelem_removeChild,
536 domelem_appendChild,
537 domelem_hasChildNodes,
538 domelem_get_ownerDocument,
539 domelem_cloneNode,
540 domelem_get_nodeTypeString,
541 domelem_get_text,
542 domelem_put_text,
543 domelem_get_specified,
544 domelem_get_definition,
545 domelem_get_nodeTypedValue,
546 domelem_put_nodeTypedValue,
547 domelem_get_dataType,
548 domelem_put_dataType,
549 domelem_get_xml,
550 domelem_transformNode,
551 domelem_selectNodes,
552 domelem_selectSingleNode,
553 domelem_get_parsed,
554 domelem_get_namespaceURI,
555 domelem_get_prefix,
556 domelem_get_baseName,
557 domelem_transformNodeToObject,
558 domelem_get_tagName,
559 domelem_getAttribute,
560 domelem_setAttribute,
561 domelem_removeAttribute,
562 domelem_getAttributeNode,
563 domelem_setAttributeNode,
564 domelem_removeAttributeNode,
565 domelem_getElementsByTagName,
566 domelem_normalize,
569 IXMLDOMElement* create_element( xmlNodePtr element )
571 domelem *This;
573 This = HeapAlloc( GetProcessHeap(), 0, sizeof *This );
574 if ( !This )
575 return NULL;
577 This->lpVtbl = &domelem_vtbl;
578 This->node = create_element_node( element );
579 This->ref = 1;
581 if ( !This->node )
583 HeapFree( GetProcessHeap(), 0, This );
584 return NULL;
587 return (IXMLDOMElement*) &This->lpVtbl;
590 #endif