/*
 * Copyright (C) 2005 Vijay Kiran Kamuju
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include <msxml2did.h>
#include <olectl.h>

import "unknwn.idl";
import "objidl.idl";
import "oaidl.idl";

interface IXMLDOMImplementation;
interface IXMLDOMNode;
interface IXMLDOMDocumentFragment;
interface IXMLDOMDocument;
interface IXMLDOMSchemaCollection;
interface IXMLDOMDocument2;
interface IXMLDOMNodeList;
interface IXMLDOMNamedNodeMap;
interface IXMLDOMCharacterData;
interface IXMLDOMAttribute;
interface IXMLDOMElement;
interface IXMLDOMText;
interface IXMLDOMComment;
interface IXMLDOMProcessingInstruction;
interface IXMLDOMCDATASection;
interface IXMLDOMDocumentType;
interface IXMLDOMNotation;
interface IXMLDOMEntity;
interface IXMLDOMEntityReference;
interface IXMLDOMParseError;
interface IXTLRuntime;
interface IXSLTemplate;
interface IXSLProcessor;

typedef enum tagDOMNodeType 
{  
    NODE_INVALID  		= 0,
    NODE_ELEMENT  		= 1,
    NODE_ATTRIBUTE		= 2,
    NODE_TEXT			= 3,
    NODE_CDATA_SECTION		= 4,
    NODE_ENTITY_REFERENCE 	= 5,
    NODE_ENTITY 		= 6,
    NODE_PROCESSING_INSTRUCTION = 7,
    NODE_COMMENT		= 8,
    NODE_DOCUMENT		= 9,
    NODE_DOCUMENT_TYPE		= 10,
    NODE_DOCUMENT_FRAGMENT 	= 11,
    NODE_NOTATION 		= 12
} DOMNodeType;

[
local,
object,
uuid (2933BF80-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNode : IDispatch
{
    [propget, id(DISPID_DOM_NODE_NODENAME)]
    HRESULT nodeName([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_NODE_NODEVALUE)]
    HRESULT nodeValue([retval, out] VARIANT *var1);

    [propput, id(DISPID_DOM_NODE_NODEVALUE)]
    HRESULT nodeValue([in] VARIANT var1);

    [propget, id(DISPID_DOM_NODE_NODETYPE)]
    HRESULT nodeType([retval, out] DOMNodeType *domNodeType);

    [propget, id(DISPID_DOM_NODE_PARENTNODE)]
    HRESULT parentNode([retval, out] IXMLDOMNode **parent);

    [propget, id(DISPID_DOM_NODE_CHILDNODES)]
    HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);

    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
    HRESULT firstChild([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_LASTCHILD)]
    HRESULT lastChild([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
    HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
    HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);

    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
    HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);

    [id(DISPID_DOM_NODE_INSERTBEFORE)]
    HRESULT insertBefore(
        [in] IXMLDOMNode *newNode,
        [in] VARIANT var1,
        [retval, out] IXMLDOMNode **outOldNode);

    [id(DISPID_DOM_NODE_REPLACECHILD)]
    HRESULT replaceChild(
        [in] IXMLDOMNode *newNode,
        [in] IXMLDOMNode *oldNode,
        [retval, out] IXMLDOMNode **outOldNode);

    [id(DISPID_DOM_NODE_REMOVECHILD)]
    HRESULT removeChild(
        [in] IXMLDOMNode *domNode,
        [retval, out] IXMLDOMNode **oldNode);

    [id(DISPID_DOM_NODE_APPENDCHILD)]
    HRESULT appendChild(
        [in] IXMLDOMNode *newNode,
        [retval, out] IXMLDOMNode **outNewNode);

    [id(DISPID_DOM_NODE_HASCHILDNODES)]
    HRESULT hasChildNodes(
        [retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_DOM_NODE_OWNERDOC)]
    HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);

    [id(DISPID_DOM_NODE_CLONENODE)]
    HRESULT cloneNode(
        [in] VARIANT_BOOL pbool,
        [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
    HRESULT nodeTypeString([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_NODE_TEXT)]
    HRESULT text([retval, out] BSTR *p);

    [propput, id(DISPID_XMLDOM_NODE_TEXT)]
    HRESULT text([in] BSTR p);

    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
    HRESULT specified([retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
    HRESULT definition([retval,out] IXMLDOMNode **domNode);

    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
    HRESULT nodeTypedValue([retval, out] VARIANT *var1);

    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
    HRESULT nodeTypedValue([in] VARIANT var1);

    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
    HRESULT dataType([retval, out] VARIANT *var1);

    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
    HRESULT dataType([in] BSTR p);

    [propget, id(DISPID_XMLDOM_NODE_XML)]
    HRESULT xml([retval, out] BSTR *p);

    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
    HRESULT transformNode(
        [in] IXMLDOMNode *domNode,
        [retval, out] BSTR *p);

    [id(DISPID_XMLDOM_NODE_SELECTNODES)]
    HRESULT selectNodes(
        [in] BSTR p,
        [retval, out] IXMLDOMNodeList **outList);

    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
    HRESULT selectSingleNode(
        [in] BSTR p,
        [retval, out] IXMLDOMNode **outNode);

    [propget,id(DISPID_XMLDOM_NODE_PARSED)]
    HRESULT parsed([retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
    HRESULT namespaceURI([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
    HRESULT prefix([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
    HRESULT baseName([retval, out] BSTR *p);

    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
    HRESULT transformNodeToObject(
        [in] IXMLDOMNode *domNode,
        [in] VARIANT var1);
};

[
local,
object,
uuid (2933BF81-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMDocument : IXMLDOMNode
{
    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
    HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);

    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
    HRESULT implementation([retval, out] IXMLDOMImplementation **impl);

    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
    HRESULT documentElement([retval, out] IXMLDOMElement **domElement);

    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
    HRESULT documentElement([in] IXMLDOMElement *domElement);

    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
    HRESULT createElement(
        [in] BSTR p,
        [retval, out] IXMLDOMElement **domElement);

    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
    HRESULT createDocumentFragment(
        [retval, out] IXMLDOMDocumentFragment **docFrag);

    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
    HRESULT createTextNode(
        [in] BSTR p,
        [retval, out] IXMLDOMText **text);

    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
    HRESULT createComment(
        [in] BSTR p,
        [retval, out] IXMLDOMComment **comment);

    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
    HRESULT createCDATASection(
        [in] BSTR p,
        [retval, out] IXMLDOMCDATASection **cdata);

    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
    HRESULT createProcessingInstruction(
        [in] BSTR target,
        [in] BSTR data,
        [retval, out] IXMLDOMProcessingInstruction **pi);

    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
    HRESULT createAttribute(
        [in] BSTR p,
        [retval, out] IXMLDOMAttribute **attribute);

    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
    HRESULT createEntityReference(
        [in] BSTR p,
        [retval, out] IXMLDOMEntityReference **entityRef);

    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR p,
        [retval, out] IXMLDOMNodeList **resultList);

    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
    HRESULT createNode(
        [in] VARIANT var, 
        [in] BSTR name, 
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
    HRESULT nodeFromID( 
        [in] BSTR id,
        [retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
    HRESULT load(
        [in] VARIANT var1,
        [retval, out] VARIANT_BOOL *pbool);

    [propget, id(DISPID_READYSTATE)]
    HRESULT readyState([retval, out] long *value);

    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
    HRESULT parseError([retval, out] IXMLDOMParseError **err);

    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
    HRESULT url([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
    HRESULT async([retval, out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
    HRESULT async([in] VARIANT_BOOL pbool);

    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
    HRESULT abort();

    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
    HRESULT loadXML( 
        [in] BSTR p,
        [out, retval] VARIANT_BOOL *pbool);

    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
    HRESULT save( 
        [in] VARIANT var1);

    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
    HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
    HRESULT validateOnParse([in] VARIANT_BOOL pbool);

    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
    HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
    HRESULT resolveExternals([in] VARIANT_BOOL pbool);

    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
    HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
    HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
    HRESULT onreadystatechange([in] VARIANT var1);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
    HRESULT ondataavailable([in] VARIANT var1);

    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
    HRESULT ontransformnode([in] VARIANT var1);
};

[
local,
object,
uuid (373984c8-b845-449b-91e7-45ac83036ade)
]
interface IXMLDOMSchemaCollection : IDispatch
{
    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]
    HRESULT add(
        [in] BSTR uri,
        [in] VARIANT var);

    [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]
    HRESULT get(
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]
    HRESULT remove(
        [in] BSTR uri);

    [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]
    HRESULT length(
        [retval, out] long *length);

    [propget, id(DISPID_VALUE)]
    HRESULT namespaceURI([in] long index, [out, retval] BSTR *len);

    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]
    HRESULT addCollection(
        [in] IXMLDOMSchemaCollection *otherCollection);

    [propget, id(DISPID_NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
};

[
local,
object,
uuid (2933BF95-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMDocument2 : IXMLDOMDocument
{
    [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]
    HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);

    [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
    HRESULT schemas([retval, out] VARIANT *var1);

    [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
    HRESULT schemas([in] VARIANT var1);

    [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]
    HRESULT validate(
        [retval, out] IXMLDOMParseError **err);

    [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]
    HRESULT setProperty(
        [in] BSTR p,
        [in] VARIANT var);

    [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]
    HRESULT getProperty(
        [in] BSTR p,
        [retval, out] VARIANT *var);
};

[
local,
object,
uuid (2933BF82-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNodeList : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT item([in] long lIndex, [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
    HRESULT length([retval, out] long *lLength);

    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
    HRESULT nextNode(
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NODELIST_RESET)]
    HRESULT reset();

    [propget, id(DISPID_NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
};

[
local,
object,
uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)
]
interface IXMLDOMSelection : IXMLDOMNodeList
{
    [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]
    HRESULT expr([retval, out] BSTR *p);

    [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]
    HRESULT expr([in] BSTR p);

    [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
    HRESULT context([retval, out] IXMLDOMNode **ppNode);

    [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
    HRESULT context([in] IXMLDOMNode * pNode);

    [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]
    HRESULT peekNode(
        [retval, out] IXMLDOMNode **ppNode);

    [id(DISPID_XMLDOM_SELECTION_MATCHES)]
    HRESULT matches(
        [in] IXMLDOMNode *pNode,
        [retval, out] IXMLDOMNode **ppNode);

    [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)] 
    HRESULT removeNext(
        [retval, out] IXMLDOMNode **ppNode);

    [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]
    HRESULT removeAll();

    [id(DISPID_XMLDOM_SELECTION_CLONE)]
    HRESULT clone(
        [retval, out] IXMLDOMSelection **ppNode);

    [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]
    HRESULT getProperty(
        [in] BSTR p,
        [retval, out] VARIANT * var);

    [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]
    HRESULT setProperty(
        [in] BSTR p,
        [in] VARIANT var);
};

[
local,
object,
uuid (2933BF83-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNamedNodeMap : IDispatch
{
    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
    HRESULT getNamedItem(
        [in] BSTR p,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
    HRESULT setNamedItem(
        [in] IXMLDOMNode *newNode,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
    HRESULT removeNamedItem(
        [in] BSTR p,
        [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_VALUE)]
    HRESULT item([in] long lIndex, [retval, out] IXMLDOMNode **outNode);

    [propget, id(DISPID_DOM_NODELIST_LENGTH)]
    HRESULT length([retval, out] long *lLength);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
    HRESULT getQualifiedItem(
        [in] BSTR name,
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
    HRESULT removeQualifiedItem(
        [in] BSTR name,
        [in] BSTR uri,
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
    HRESULT nextNode(
        [retval, out] IXMLDOMNode **outNode);

    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
    HRESULT reset();

    [propget, id(DISPID_NEWENUM)]
    HRESULT _newEnum([retval, out] IUnknown **ppUnk);
};
 
[
local,
object,
uuid (3efaa413-272f-11d2-836f-0000f87a7782)
]
interface IXMLDOMDocumentFragment : IXMLDOMNode 
{
};

[
local,
object,
uuid (2933BF84-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMCharacterData : IXMLDOMNode 
{
    [propget, id(DISPID_DOM_DATA_DATA)]
    HRESULT data([retval, out] BSTR *p);

    [propput, id(DISPID_DOM_DATA_DATA)]
    HRESULT data([in] BSTR data);

    [propget, id(DISPID_DOM_DATA_LENGTH)]
    HRESULT length([retval, out] long *len);

    [id(DISPID_DOM_DATA_SUBSTRING)]
    HRESULT substringData(
        [in] long offset,
        [in] long count,
        [retval, out] BSTR *p);

    [id(DISPID_DOM_DATA_APPEND)]
    HRESULT appendData(
        [in] BSTR p);

    [id(DISPID_DOM_DATA_INSERT)]
    HRESULT insertData(
        [in] long offset,
        [in] BSTR p);

    [id(DISPID_DOM_DATA_DELETE)]
    HRESULT deleteData(
        [in] long offset,
        [in] long count);

    [id(DISPID_DOM_DATA_REPLACE)]
    HRESULT replaceData(
        [in] long offset,
        [in] long count,
        [in] BSTR p);
};

[
local,
object,
uuid (2933BF85-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMAttribute : IXMLDOMNode 
{
    [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]
    HRESULT value([retval, out] VARIANT *var1);

    [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]
    HRESULT value([in] VARIANT var1);
};

[
local,
object,
uuid (2933BF86-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMElement : IXMLDOMNode 
{
    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
    HRESULT tagName([retval, out] BSTR *p);

    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
    HRESULT getAttribute(
        [in] BSTR p,
        [retval, out] VARIANT *var);

    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] BSTR p,
        [in] VARIANT var);

    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
    HRESULT removeAttribute(
        [in] BSTR p);

    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
    HRESULT getAttributeNode(
        [in] BSTR p,
        [retval, out] IXMLDOMAttribute **attributeNode);

    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
    HRESULT setAttributeNode(
        [in] IXMLDOMAttribute *domAttribute,
        [retval, out] IXMLDOMAttribute **attributeNode);

    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
    HRESULT removeAttributeNode(
        [in] IXMLDOMAttribute *domAttribute,
        [retval, out] IXMLDOMAttribute **attributeNode);

    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
    HRESULT getElementsByTagName(
        [in] BSTR p,
        [retval, out] IXMLDOMNodeList **resultList);

    [id(DISPID_DOM_ELEMENT_NORMALIZE)]
    HRESULT normalize();
};

[
local,
object,
uuid (2933BF87-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMText : IXMLDOMCharacterData 
{
    [id(DISPID_DOM_TEXT_SPLITTEXT)]
    HRESULT splitText(
        [in] long offset,
        [retval, out] IXMLDOMText **txtNode);
};

[
local,
object,
uuid (2933BF88-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMComment : IXMLDOMCharacterData 
{
};

[
local,
object,
uuid (2933BF89-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMProcessingInstruction : IXMLDOMNode 
{
    [propget, id(DISPID_DOM_PI_TARGET)]
    HRESULT target([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_PI_DATA)]
    HRESULT data([retval, out] BSTR *p);

    [propput, id(DISPID_DOM_PI_DATA)]
    HRESULT data([in] BSTR p);
};

[
local,
object,
uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMCDATASection : IXMLDOMText 
{
};

[
local,
object,
uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMDocumentType : IXMLDOMNode 
{
    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
    HRESULT name([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
    HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);

    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
    HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);
};

[
local,
object,
uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMNotation : IXMLDOMNode 
{
    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
    HRESULT publicId([retval, out] VARIANT *id);

    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
    HRESULT systemId([retval, out] VARIANT *id);
};

[
local,
object,
uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMEntity : IXMLDOMNode 
{
    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
    HRESULT publicId([retval, out] VARIANT *id1);

    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
    HRESULT systemId([retval, out] VARIANT *id1);

    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
    HRESULT notationName([retval, out] BSTR *p);
};

[
local,
object,
uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMEntityReference : IXMLDOMNode 
{
};

[
local,
object,
uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)
]
interface IXMLDOMImplementation : IDispatch
{
    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
    HRESULT hasFeature(
        [in] BSTR feature,
        [in] BSTR version,
        [retval, out] VARIANT_BOOL *pbool);
};

[
local,
object,
uuid (3efaa425-272f-11d2-836f-0000f87a7782)
]
interface IXTLRuntime : IXMLDOMNode
{
    [id(DISPID_XTLRUNTIME_UNIQUEID)] 
    HRESULT uniqueID(
        [in]IXMLDOMNode *pNode, 
        [retval, out]long *pID);

    [id(DISPID_XTLRUNTIME_DEPTH)]
    HRESULT depth(
        [in] IXMLDOMNode *pNode, 
        [retval, out]long * pDepth);

    [id(DISPID_XTLRUNTIME_CHILDNUMBER)] 
    HRESULT childNumber(
        [in]IXMLDOMNode *pNode, 
        [retval, out] long *pNumber);

    [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]
    HRESULT ancestorChildNumber(
        [in]BSTR bstr, 
        [in]IXMLDOMNode *pNode, 
        [retval, out]long *pNumber);

    [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]
    HRESULT absoluteChildNumber(
        [in]IXMLDOMNode *pNode, 
        [retval, out]long *pNumber);

    [id(DISPID_XTLRUNTIME_FORMATINDEX)]
    HRESULT formatIndex(
        [in] long lIndex, 
        [in] BSTR bstr, 
        [retval, out]BSTR *pbstr);

    [id(DISPID_XTLRUNTIME_FORMATNUMBER)]
    HRESULT formatNumber(
        [in] double dblNumber, 
        [in] BSTR bstr, 
        [retval, out]BSTR *pbstr);

    [id(DISPID_XTLRUNTIME_FORMATDATE)]
    HRESULT formatDate(
        [in] VARIANT var1, 
        [in] BSTR bstr, 
        [optional, in] VARIANT var2,
        [retval, out]BSTR *pbstr);

    [id(DISPID_XTLRUNTIME_FORMATTIME)]
    HRESULT formatTime(
        [in] VARIANT var1, 
        [in] BSTR bstr, 
        [optional, in] VARIANT var2,
        [retval, out]BSTR *pbstr);

};

[
    uuid(3efaa427-272f-11d2-836f-0000f87a7782)
]
dispinterface XMLDOMDocumentEvents 
{
    properties:
    methods:
    [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]  
    HRESULT ondataavailable();
 
    [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)] 
    HRESULT onreadystatechange();
};

[
local,
object,
uuid (2933BF92-7B36-11d2-B20E-00C04F983E60)
]
interface IXSLProcessor : IDispatch
{
    [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
    HRESULT input([in] VARIANT var);

    [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
    HRESULT input([retval, out] VARIANT *var);

    [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]
    HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);

    [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]
    HRESULT setStartMode(
        [in] BSTR p, 
        [in, defaultvalue("")] BSTR uri);

    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]
    HRESULT startMode([retval, out] BSTR *p);

    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]
    HRESULT startModeURI([retval, out] BSTR *uri);

    [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
    HRESULT output([in] VARIANT var);

    [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
    HRESULT output([retval, out] VARIANT *var);

    [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]
    HRESULT transform(
        [retval, out] VARIANT_BOOL *pbool);

    [id(DISPID_XMLDOM_PROCESSOR_RESET)]
    HRESULT reset();

    [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]
    HRESULT readyState([retval, out] long *pstate);

    [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]
    HRESULT addParameter(
        [in] BSTR p, 
        [in] VARIANT var, 
        [in, defaultvalue("")] BSTR uri);

    [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]
    HRESULT addObject(
        [in] IDispatch* obj, 
        [in] BSTR uri);

    [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]
    HRESULT stylesheet([retval, out] IXMLDOMNode **node);
}; 

[
local,
object,
uuid (2933BF93-7B36-11d2-B20E-00C04F983E60)
]
interface IXSLTemplate : IDispatch
{
    [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
    HRESULT stylesheet([in] IXMLDOMNode *node);

    [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
    HRESULT stylesheet([retval, out] IXMLDOMNode **node);

    [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]
    HRESULT createProcessor(
        [retval, out] IXSLProcessor **ppProcessor);
}; 

[
local,
object,
uuid (3efaa426-272f-11d2-836f-0000f87a7782)
]
interface IXMLDOMParseError : IDispatch
{
    [propget, id(DISPID_VALUE)]
    HRESULT errorCode([retval, out] long *errCode);

    [propget, id(DISPID_DOM_ERROR_URL)]
    HRESULT url([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ERROR_REASON)]
    HRESULT reason([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
    HRESULT srcText([retval, out] BSTR *p);

    [propget, id(DISPID_DOM_ERROR_LINE)]
    HRESULT line([retval, out] long *lineNo);

    [propget, id(DISPID_DOM_ERROR_LINEPOS)]
    HRESULT linepos([retval, out] long * linePos);

    [propget, id(DISPID_DOM_ERROR_FILEPOS)]
    HRESULT filepos([retval, out] long * filePos);
};

[
    uuid(F6D90F11-9C73-11D3-B32E-00C04F990BB4)
]
coclass DOMDocument
{
    [default] interface IXMLDOMDocument2;
    [default, source] dispinterface XMLDOMDocumentEvents;
};

[
    uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)
]
coclass DOMDocument26
{
    [default] interface IXMLDOMDocument2;
    [default, source] dispinterface XMLDOMDocumentEvents;
};

[
    uuid(f5078f32-c551-11d3-89b9-0000f81fe221)
]
coclass DOMDocument30
{
    [default] interface IXMLDOMDocument2;
    [default, source] dispinterface XMLDOMDocumentEvents;
};


[
    uuid(F6D90F12-9C73-11D3-B32E-00C04F990BB4)
]
coclass FreeThreadedDOMDocument
{
    [default] interface IXMLDOMDocument2;
    [default, source] dispinterface XMLDOMDocumentEvents;
};

[
    uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)
]
coclass FreeThreadedDOMDocument26
{
    [default] interface IXMLDOMDocument2;
    [default, source] dispinterface XMLDOMDocumentEvents;
};

[
    uuid(f5078f33-c551-11d3-89b9-0000f81fe221)
]
coclass FreeThreadedDOMDocument30
{
    [default] interface IXMLDOMDocument2;
    [default, source] dispinterface XMLDOMDocumentEvents;
};

[
    uuid(373984c9-b845-449b-91e7-45ac83036ade)
]
coclass XMLSchemaCache
{
    [default] interface IXMLDOMSchemaCollection;
};

[
    uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)
]
coclass XMLSchemaCache26
{
    [default] interface IXMLDOMSchemaCollection;
};

[
    uuid(f5078f34-c551-11d3-89b9-0000f81fe221)
]
coclass XMLSchemaCache30
{
    [default] interface IXMLDOMSchemaCollection;
};

[
    uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)
]
coclass XSLTemplate
{
    [default] interface IXSLTemplate;
};

[
    uuid(f5078f21-c551-11d3-89b9-0000f81fe221)
]
coclass XSLTemplate26
{
    [default] interface IXSLTemplate;
};

[
    uuid(f5078f36-c551-11d3-89b9-0000f81fe221)
]
coclass XSLTemplate30
{
    [default] interface IXSLTemplate;
};