/*
 * Copyright (C) 2005 Vijay Kiran Kamuju
 * Copyright (C) 2008 Alistair Leslie-Hughes
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

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

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

[
    uuid(f5078f18-c551-11d3-89b9-0000f81fe221),
    version(3.0),
    helpstring("Microsoft XML, v3.0")
]
library MSXML2
{

importlib("stdole2.tlb");

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;

/* SAX Interfaces */
interface ISAXAttributes;
interface ISAXContentHandler;
interface ISAXDeclHandler;
interface ISAXDTDHandler;
interface ISAXEntityResolver;
interface ISAXErrorHandler;
interface ISAXLexicalHandler;
interface ISAXLocator;
interface ISAXXMLFilter;
interface ISAXXMLReader;

interface IVBSAXAttributes;
interface IVBSAXContentHandler;
interface IVBSAXDeclHandler;
interface IVBSAXDTDHandler;
interface IVBSAXEntityResolver;
interface IVBSAXErrorHandler;
interface IVBSAXLexicalHandler;
interface IVBSAXLocator;
interface IVBSAXXMLFilter;
interface IVBSAXXMLReader;

interface IMXAttributes;
interface IMXReaderControl;
interface IMXWriter;


cpp_quote("#define DOMDocument DOMDocument2")
cpp_quote("#define CLSID_DOMDocument CLSID_DOMDocument2")

cpp_quote("#ifndef __WIDL_XMLDOM_H")
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;
cpp_quote("#endif   /* __WIDL_XMLDOM_H */")

[
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);
} 

[
    object,
    uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),
    odl,
    dual,
    oleautomation,
    pointer_default(unique)
]
interface IXMLHTTPRequest : IDispatch
{
    [id(1)]
    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,
                 [in,optional] VARIANT username, [in,optional] VARIANT password);

    [id(2)]
    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);

    [id(3)]
    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);

    [id(4)]
    HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);

    [id(5)]
    HRESULT send([in, optional] VARIANT body);

    [id(6)]
    HRESULT abort();

    [propget, id(7)]
    HRESULT status([out, retval] LONG *pStatus);

    [propget, id(8)]
    HRESULT statusText([out, retval] BSTR *pStatus);

    [propget, id(9)]
    HRESULT responseXML([out, retval] IDispatch **pBody);

    [propget, id(10)]
    HRESULT responseText([out, retval] BSTR *pBody);

    [propget, id(11)]
    HRESULT responseBody([out, retval] VARIANT *pBody);

    [propget, id(12)]
    HRESULT responseStream([out, retval] VARIANT *pBody);

    [propget, id(13)]
    HRESULT readyState([out, retval] LONG *pState);

    [propput, id(14)]
    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
};

[
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;
}

/*
 * Sax Interfaces
 */
[
    object,
    local,
    uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)
]
interface ISAXAttributes : IUnknown
{
    HRESULT getLength(
        [out, retval] int *length);

    HRESULT getURI(
        [in] int nIndex,
        [out] const WCHAR **pUrl,
        [out] int *pUriSize);

    HRESULT getLocalName(
        [in] int nIndex,
        [out] const WCHAR **pLocalName,
        [out] int *pLocalNameLength);

    HRESULT getQName(
        [in] int nIndex,
        [out] const WCHAR **pQName,
        [out] int *pQNameLength);

    HRESULT getName(
        [in] int nIndex,
        [out] const WCHAR **pUri,
        [out] int * pUriLength,
        [out] const WCHAR ** pLocalName,
        [out] int * pLocalNameSize,
        [out] const WCHAR ** pQName,
        [out] int * pQNameLength);

    HRESULT getIndexFromName(
        [in] const WCHAR * pUri,
        [in] int cUriLength,
        [in] const WCHAR * pLocalName,
        [in] int cocalNameLength,
        [out, retval] int * index);

    HRESULT getIndexFromQName(
        [in] const WCHAR * pQName,
        [in] int nQNameLength,
        [out, retval] int * index);

    HRESULT getType(
        [in] int nIndex,
        [out] const WCHAR ** pType,
        [out] int * pTypeLength);

    HRESULT getTypeFromName(
        [in] const WCHAR * pUri,
        [in] int nUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [out] const WCHAR ** pType,
        [out] int * nType);

    HRESULT getTypeFromQName(
        [in] const WCHAR * pQName,
        [in] int nQName,
        [out] const WCHAR ** pType,
        [out] int * nType);

    HRESULT getValue(
        [in] int nIndex,
        [out] const WCHAR ** pValue,
        [out] int * nValue);

    HRESULT getValueFromName(
        [in] const WCHAR * pUri,
        [in] int nUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [out] const WCHAR ** pValue,
        [out] int * nValue);

    HRESULT getValueFromQName(
        [in] const WCHAR * pQName,
        [in] int nQName,
        [out] const WCHAR ** pValue,
        [out] int * nValue);
};

[
    object,
    local,
    uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)
]
interface ISAXContentHandler : IUnknown
{
    HRESULT putDocumentLocator(
        [in] ISAXLocator * pLocator);

    HRESULT startDocument();

    HRESULT endDocument();

    HRESULT startPrefixMapping(
        [in] const WCHAR * pPrefix,
        [in] int nPrefix,
        [in] const WCHAR * pUri,
        [in] int nUri);

    HRESULT endPrefixMapping(
        [in] const WCHAR * pPrefix,
        [in] int nPrefix);

    HRESULT startElement(
        [in] const WCHAR * pNamespaceUri,
        [in] int nNamespaceUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [in] const WCHAR * pQName,
        [in] int nQName,
        [in] ISAXAttributes * pAttr);

    HRESULT endElement(
        [in] const WCHAR * pNamespaceUri,
        [in] int nNamespaceUri,
        [in] const WCHAR * pLocalName,
        [in] int nLocalName,
        [in] const WCHAR * pQName,
        [in] int nQName);

    HRESULT characters(
        [in] const WCHAR * pChars,
        [in] int nChars);

    HRESULT ignorableWhitespace(
        [in] const WCHAR * pChars,
        [in] int nChars);

    HRESULT processingInstruction(
        [in] const WCHAR * pTarget,
        [in] int nTarget,
        [in] const WCHAR * pData,
        [in] int nData);

    HRESULT skippedEntity(
        [in] const WCHAR * pName,
        [in] int nName);
};

[
    object,
    local,
    uuid(862629ac-771a-47b2-8337-4e6843c1be90)
]
interface ISAXDeclHandler : IUnknown
{
    HRESULT elementDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pModel,
        [in] int nModel);

    HRESULT attributeDecl(
        [in] const WCHAR * pElementName,
        [in] int nElementName,
        [in] const WCHAR * pAttributeName,
        [in] int nAttributeName,
        [in] const WCHAR * pType,
        [in] int nType,
        [in] const WCHAR * pValueDefault,
        [in] int nValueDefault,
        [in] const WCHAR * pValue,
        [in] int nValue);

    HRESULT internalEntityDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pValue,
        [in] int nValue);

    HRESULT externalEntityDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId);
};

[
    object,
    local,
    uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)
]
interface ISAXDTDHandler : IUnknown
{
    HRESULT notationDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId);

    HRESULT unparsedEntityDecl(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId,
        [in] const WCHAR * pNotationName,
        [in] int nNotationName);
};

[
    object,
    local,
    uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),
]
interface ISAXEntityResolver : IUnknown
{
    HRESULT resolveEntity(
        [in] const WCHAR * pPublicId,
        [in] const WCHAR * pSystemId,
        [out, retval] VARIANT * ret);
};

[
    object,
    local,
    uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)
]
interface ISAXErrorHandler : IUnknown
{
    HRESULT error(
        [in] ISAXLocator * pLocator,
        [in] const WCHAR * pErrorMessage,
        [in] HRESULT hrErrorCode);

    HRESULT fatalError(
        [in] ISAXLocator * pLocator,
        [in] const WCHAR * pErrorMessage,
        [in] HRESULT hrErrorCode);

    HRESULT ignorableWarning(
        [in] ISAXLocator * pLocator,
        [in] const WCHAR * pErrorMessage,
        [in] HRESULT hrErrorCode);
};

[
    object,
    local,
    uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)
]
interface ISAXLexicalHandler : IUnknown
{
    HRESULT startDTD(
        [in] const WCHAR * pName,
        [in] int nName,
        [in] const WCHAR * pPublicId,
        [in] int nPublicId,
        [in] const WCHAR * pSystemId,
        [in] int nSystemId);

    HRESULT endDTD();

    HRESULT startEntity(
        [in] const WCHAR * pName,
        [in] int nName);

    HRESULT endEntity(
        [in] const WCHAR * pName,
        [in] int nName);

    HRESULT startCDATA();

    HRESULT endCDATA();

    HRESULT comment(
        [in] const WCHAR * pChars,
        [in] int nChars);
};

[
    object,
    local,
    uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)
]
interface ISAXLocator : IUnknown
{
    HRESULT getColumnNumber(
        [out, retval] int * nColumn);

    HRESULT getLineNumber(
        [out, retval] int * nLine);

    HRESULT getPublicId(
        [out, retval] const WCHAR ** publicId);

    HRESULT getSystemId(
        [out, retval] const WCHAR ** systemId);
};

[
    local,
    object,
    uuid(70409222-ca09-4475-acb8-40312fe8d145)
]
interface ISAXXMLFilter : ISAXXMLReader
{
    HRESULT getParent(
        [out, retval] ISAXXMLReader ** pReader);
    HRESULT putParent(
        [in] ISAXXMLReader * reader);
};

[
local,
object,
uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)
]
interface ISAXXMLReader : IUnknown
{
    HRESULT getFeature(
        [in] const WCHAR * pFeature,
        [out, retval] VARIANT_BOOL * pValue);
    HRESULT putFeature(
        [in] const WCHAR * pFeature,
        [in] VARIANT_BOOL vfValue);

    HRESULT getProperty(
        [in] const WCHAR * pProp,
        [out, retval] VARIANT * pValue);
    HRESULT putProperty(
        [in] const WCHAR * pProp,
        [in] VARIANT value);

    HRESULT getEntityResolver(
        [out, retval] ISAXEntityResolver ** ppEntityResolver);
    HRESULT putEntityResolver(
        [in] ISAXEntityResolver * pEntityResolver);

    HRESULT getContentHandler(
        [out, retval] ISAXContentHandler ** pContentHandler);
    HRESULT putContentHandler(
        [in] ISAXContentHandler * contentHandler);

    HRESULT getDTDHandler(
        [out, retval] ISAXDTDHandler ** pDTDHandler);
    HRESULT putDTDHandler(
        [in] ISAXDTDHandler * pDTDHandler);

    HRESULT getErrorHandler(
        [out, retval] ISAXErrorHandler ** pErrorHandler);
    HRESULT putErrorHandler(
        [in] ISAXErrorHandler * errorHandler);

    HRESULT getBaseURL(
        [out, retval] const WCHAR ** pBaseUrl);
    HRESULT putBaseURL(
        [in] const WCHAR * pBaseUrl);

    HRESULT getSecureBaseURL(
        [out, retval] const WCHAR ** pSecureBaseUrl);
    HRESULT putSecureBaseURL(
        [in] const WCHAR * secureBaseUrl);

    HRESULT parse(
        [in] VARIANT varInput);
    HRESULT parseURL(
        [in] const WCHAR * url);
}

[
    object,
    dual,
    uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)
]
interface IVBSAXAttributes : IDispatch
{
    [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]
    HRESULT length( [out, retval] int * nLength);

    [id(DISPID_SAX_ATTRIBUTES_GETURI)]
    HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);

    [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]
    HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);

    [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]
    HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);

    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]
    HRESULT getIndexFromName( [in] BSTR uri,
                              [in] BSTR localName, [out, retval] int * nIndex);

    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]
    HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);

    [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]
    HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);

    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]
    HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,
                             [out, retval] BSTR * type);

    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]
    HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);

    [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]
    HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);

    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]
    HRESULT getValueFromName( [in] BSTR uri,
                              [in] BSTR localName,
                              [out, retval] BSTR * value);

    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]
    HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);
};

[
    object,
    dual,
    uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)
]
interface IVBSAXContentHandler : IDispatch
{
    [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]
    HRESULT documentLocator( [in] IVBSAXLocator * oLocator);

    [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]
    HRESULT startDocument();

    [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]
    HRESULT endDocument();

    [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]
    HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);

    [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]
    HRESULT endPrefixMapping( [in, out] BSTR * prefix);

    [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]
    HRESULT startElement( [in, out] BSTR * namespaceURI,
                          [in, out] BSTR * localName,
                          [in, out] BSTR * QName,
                          [in] IVBSAXAttributes * oAttributes);

    [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]
    HRESULT endElement( [in, out] BSTR * namespaceURI,
                        [in, out] BSTR * localName, [in, out] BSTR * strQName);

    [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]
    HRESULT characters( [in, out] BSTR * chars);

    [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]
    HRESULT ignorableWhitespace( [in, out] BSTR * chars);

    [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]
    HRESULT processingInstruction( [in, out] BSTR * target,
                                   [in, out] BSTR * data);

    [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]
    HRESULT skippedEntity( [in, out] BSTR * name);
};

[
    object,
    dual,
    uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)
]
interface IVBSAXDeclHandler : IDispatch
{
    [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]
    HRESULT elementDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * model);

    [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]
    HRESULT attributeDecl(
        [in, out] BSTR * elementName,
        [in, out] BSTR * attributeName,
        [in, out] BSTR * type,
        [in, out] BSTR * valueDefault,
        [in, out] BSTR * value);

    [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]
    HRESULT internalEntityDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * value);

    [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]
    HRESULT externalEntityDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId);
};

[
    object,
    dual,
    uuid(24fb3297-302d-4620-ba39-3a732d850558)
]
interface IVBSAXDTDHandler : IDispatch
{
    [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]
    HRESULT notationDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId);

    [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]
    HRESULT unparsedEntityDecl(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId,
        [in, out] BSTR * notationName);
};

[
    object,
    dual,
    uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)
]
interface IVBSAXEntityResolver : IDispatch
{
    [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]
    HRESULT resolveEntity(
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId,
        [out, retval] VARIANT * ret);
};

[
    object,
    dual,
    uuid(d963d3fe-173c-4862-9095-b92f66995f52)
]
interface IVBSAXErrorHandler : IDispatch
{
    [id(DISPID_SAX_ERRORHANDLER_ERROR)]
    HRESULT error(
            [in] IVBSAXLocator * locator,
	    [in, out] BSTR * errorMessage,
            [in] LONG errorCode);

    [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]
    HRESULT fatalError(
	    [in] IVBSAXLocator * locator,
	    [in, out] BSTR * errorMessage,
            [in] LONG errorCode);

    [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]
    HRESULT ignorableWarning(
	    [in] IVBSAXLocator * locator,
	    [in, out] BSTR * errorMessage,
            [in] LONG errorCode);
};

[
    object,
    dual,
    uuid(032aac35-8c0e-4d9d-979f-e3b702935576)
]
interface IVBSAXLexicalHandler : IDispatch
{
    [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]
    HRESULT startDTD(
        [in, out] BSTR * name,
        [in, out] BSTR * publicId,
        [in, out] BSTR * systemId);
    [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]
    HRESULT endDTD();

    [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]
    HRESULT startEntity([in, out] BSTR * name);
    [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]
    HRESULT endEntity([in, out] BSTR * name);

    [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]
    HRESULT startCDATA();
    [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]
    HRESULT endCDATA();

    [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]
    HRESULT comment( [in, out] BSTR * chars);
};

[
    object,
    uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)
]
interface IVBSAXLocator : IDispatch
{
    [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]
    HRESULT columnNumber( [out, retval] int * column);

    [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]
    HRESULT lineNumber( [out, retval] int * line);

    [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]
    HRESULT publicId( [out, retval] BSTR * publicId);

    [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]
    HRESULT systemId( [out, retval] BSTR * systemId);
};

[
    object,
    dual,
    uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)
]
interface IVBSAXXMLFilter : IDispatch
{
    [propget, id(DISPID_SAX_XMLFILTER_PARENT)]
    HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);
    [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]
    HRESULT parent( [in] IVBSAXXMLReader * reader);

};

[
    dual,
    object,
    uuid (8c033caa-6cd6-4f73-b728-4531af74945f)
]
interface IVBSAXXMLReader : IDispatch
{
    [id(DISPID_SAX_XMLREADER_GETFEATURE)]
    HRESULT getFeature( [in] const WCHAR * pFeature,
                        [out, retval] VARIANT_BOOL * pValue);
    [id(DISPID_SAX_XMLREADER_PUTFEATURE)]
    HRESULT putFeature( [in] const WCHAR * pFeature,
                        [in] VARIANT_BOOL vfValue);

    [id(DISPID_SAX_XMLREADER_GETPROPERTY)]
    HRESULT getProperty( [in] const WCHAR * pProp,
                         [out, retval] VARIANT * pValue);
    [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]
    HRESULT putProperty( [in] const WCHAR * pProp, [in] VARIANT value);

    [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
    HRESULT entityResolver(
                    [out, retval] IVBSAXEntityResolver ** ppEntityResolver);
    [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
    HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);

    [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
    HRESULT contentHandler(
                        [out, retval] IVBSAXContentHandler ** pContentHandler);
    [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
    HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);

    [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
    HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);
    [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
    HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);

    [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
    HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);
    [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
    HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);

    [propget, id(DISPID_SAX_XMLREADER_BASEURL)]
    HRESULT baseURL([out, retval] const WCHAR ** pBaseUrl);
    [propput, id(DISPID_SAX_XMLREADER_BASEURL)]
    HRESULT baseURL([in] const WCHAR * pBaseUrl);

    [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
    HRESULT secureBaseURL([out, retval] const WCHAR ** pSecureBaseUrl);
    [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
    HRESULT secureBaseURL([in] const WCHAR * secureBaseUrl);

    [id(DISPID_SAX_XMLREADER_PARSE)]
    HRESULT parse( [in] VARIANT varInput);
    [id(DISPID_SAX_XMLREADER_PARSEURL)]
    HRESULT parseURL([in] const WCHAR * url);
}

[
    object,
    dual,
    uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)
]
interface IMXAttributes : IDispatch
{
    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]
    HRESULT addAttribute(
        [in] BSTR uri,
        [in] BSTR localName,
        [in] BSTR QName,
        [in] BSTR type,
        [in] BSTR value);

    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]
    HRESULT addAttributeFromIndex( [in] VARIANT atts,
                                   [in] int index);

    [id(DISPID_MX_ATTRIBUTES_CLEAR)]
    HRESULT clear();

    [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]
    HRESULT removeAttribute( [in] int index);

    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]
    HRESULT setAttribute(
        [in] int index,
        [in] BSTR uri,
        [in] BSTR localName,
        [in] BSTR QName,
        [in] BSTR type,
        [in] BSTR value);

    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]
    HRESULT setAttributes( [in] VARIANT atts);

    [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]
    HRESULT setLocalName( [in] int index,
        [in] BSTR localName);

    [id(DISPID_MX_ATTRIBUTES_SETQNAME)]
    HRESULT setQName(
        [in] int index,
        [in] BSTR QName);

    [id(DISPID_MX_ATTRIBUTES_SETTYPE)]
    HRESULT setType( [in] int index, [in] BSTR type);

    [id(DISPID_MX_ATTRIBUTES_SETURI)]
    HRESULT setURI( [in] int index,  [in] BSTR uri);

    [id(DISPID_MX_ATTRIBUTES_SETVALUE)]
    HRESULT setValue([in] int index, [in] BSTR value);
};

[
    object,
    dual,
    uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)
]
interface IMXReaderControl : IDispatch
{
    [id(DISPID_MX_READER_CONTROL_ABORT)]
    HRESULT abort();

    [id(DISPID_MX_READER_CONTROL_RESUME)]
    HRESULT resume();

    [id(DISPID_MX_READER_CONTROL_SUSPEND)]
    HRESULT suspend();
};

[
    object,
    dual,
    uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)
]
interface IMXWriter :  IDispatch
{
    [propput, id(DISPID_MX_WRITER_OUTPUT)]
    HRESULT output ( [in] VARIANT Destination);
    [propget, id(DISPID_MX_WRITER_OUTPUT)]
    HRESULT output ( [out, retval] VARIANT * Destination);

    [propput, id(DISPID_MX_WRITER_ENCODING)]
    HRESULT encoding ([in] BSTR encoding);
    [propget, id(DISPID_MX_WRITER_ENCODING)]
    HRESULT encoding ([out, retval] BSTR * encoding);

    [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]
    HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);
    [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]
    HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);

    [propput, id(DISPID_MX_WRITER_INDENT)]
    HRESULT indent ([in] VARIANT_BOOL indentMode);
    [propget, id(DISPID_MX_WRITER_INDENT)]
    HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);

    [propput, id(DISPID_MX_WRITER_STANDALONE)]
    HRESULT standalone ([in] VARIANT_BOOL value);
    [propget, id(DISPID_MX_WRITER_STANDALONE)]
    HRESULT standalone ([out, retval] VARIANT_BOOL * value);

    [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
    HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);
    [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
    HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);

    [propput, id(DISPID_MX_WRITER_VERSION)]
    HRESULT version ([in] BSTR version);
    [propget, id(DISPID_MX_WRITER_VERSION)]
    HRESULT version ([out, retval] BSTR * version);

    [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
    HRESULT disableOutputEscaping([in] VARIANT_BOOL value);
    [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
    HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);

    [id(DISPID_MX_WRITER_FLUSH)]
    HRESULT flush();
};

[
    uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9)
]
coclass SAXXMLReader
{
    [default] interface IVBSAXXMLReader;
    interface ISAXXMLReader;
    interface IMXReaderControl;
};

[
    uuid(3124c396-fb13-4836-a6ad-1317f1713688)
]
coclass SAXXMLReader30
{
    [default] interface IVBSAXXMLReader;
    interface ISAXXMLReader;
    interface IMXReaderControl;
};

[
    uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)
]
coclass MXXMLWriter
{
    [default] interface IMXWriter;

    interface ISAXContentHandler;
    interface ISAXErrorHandler;
    interface ISAXDTDHandler;
    interface ISAXLexicalHandler;
    interface ISAXDeclHandler;

    interface IVBSAXContentHandler;
    interface IVBSAXDeclHandler;
    interface IVBSAXDTDHandler;
    interface IVBSAXErrorHandler;
    interface IVBSAXLexicalHandler;
};

[
    uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c)
]
coclass MXXMLWriter30
{
    [default] interface IMXWriter;

    interface ISAXContentHandler;
    interface ISAXDeclHandler;
    interface ISAXDTDHandler;
    interface ISAXErrorHandler;
    interface ISAXLexicalHandler;

    interface IVBSAXContentHandler;
    interface IVBSAXDeclHandler;
    interface IVBSAXDTDHandler;
    interface IVBSAXErrorHandler;
    interface IVBSAXLexicalHandler;
};

[
    uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0)
]
coclass SAXAttributes
{
    [default] interface IMXAttributes;
    interface IVBSAXAttributes;
    interface ISAXAttributes;
};

[
    uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba)
]
coclass SAXAttributes30
{
    [default] interface IMXAttributes;
    interface IVBSAXAttributes;
    interface ISAXAttributes;
};


} /* Library MSXML */