From 7afcc72098938177f430f179b2e56188744063ca Mon Sep 17 00:00:00 2001 From: Rahul Jain <rahulj@apache.org> Date: Mon, 19 Jun 2000 20:06:36 +0000 Subject: [PATCH] Changes for increased conformance and stability. Submitted by Curt.Arnold@hyprotech.com. Verified by Joe Polastre. git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@172178 13f79535-47bb-0310-9956-ffa450edef68 --- .../VC6/xerces-all/xerces-com/xerces-com.dsp | 46 +++-- src/com/IXMLDOMNodeImpl.h | 7 +- src/com/IXMLDOMNodeImpl.inl | 19 +- src/com/StdAfx.cpp | 2 +- src/com/XMLDOMAttribute.cpp | 22 +++ src/com/XMLDOMAttribute.h | 8 + src/com/XMLDOMDocument.cpp | 41 ++++- src/com/XMLDOMDocument.h | 5 + src/com/XMLDOMElement.cpp | 63 +++++-- src/com/XMLDOMNamedNodeMap.cpp | 38 ++-- src/com/XMLDOMNodeList.cpp | 15 +- src/com/XMLDOMUtil.cpp | 63 +++++-- src/com/XMLDOMUtil.h | 6 +- src/com/XMLDOMXMLDecl.cpp | 166 ++++++++++++++++++ src/com/XMLDOMXMLDecl.h | 100 +++++++++++ src/com/xml4com.cpp | 109 +++++++++++- src/com/xml4com.idl | 31 ++++ src/com/xmldocument.rgs | 12 +- src/com/xmlhttprequest.rgs | 12 +- 19 files changed, 670 insertions(+), 95 deletions(-) create mode 100644 src/com/XMLDOMXMLDecl.cpp create mode 100644 src/com/XMLDOMXMLDecl.h diff --git a/Projects/Win32/VC6/xerces-all/xerces-com/xerces-com.dsp b/Projects/Win32/VC6/xerces-all/xerces-com/xerces-com.dsp index 79e17ee93..a6bd9c069 100644 --- a/Projects/Win32/VC6/xerces-all/xerces-com/xerces-com.dsp +++ b/Projects/Win32/VC6/xerces-all/xerces-com/xerces-com.dsp @@ -58,14 +58,14 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wininet.lib shlwapi.lib xerces-c_1D.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win32\VC6\Debug" # Begin Custom Build - Performing registration OutDir=.\..\..\..\..\..\Build\Win32\xml4com\Debug -TargetDir=\xml-xerces\c\Build\Win32\xml4com\Debug -TargetPath=\xml-xerces\c\Build\Win32\xml4com\Debug\xerces-com.dll -InputPath=\xml-xerces\c\Build\Win32\xml4com\Debug\xerces-com.dll +TargetDir=.\..\..\..\..\..\Build\Win32\xml4com\Debug +TargetPath=.\..\..\..\..\..\Build\Win32\xml4com\Debug\xerces-com.dll +InputPath=.\..\..\..\..\..\Build\Win32\xml4com\Debug\xerces-com.dll SOURCE="$(InputPath)" "$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - echo copy ..\..\..\..\..\Build\Win32\VC6\Debug\xerces-c_1_2.dll $(TargetDir) - copy ..\..\..\..\..\Build\Win32\VC6\Debug\xerces-c_1_2.dll $(TargetDir) + echo copy ..\..\..\..\..\Build\Win32\VC6\Debug\xerces-c_1_2D.dll "$(TargetDir)" + copy ..\..\..\..\..\Build\Win32\VC6\Debug\xerces-c_1_2D.dll "$(TargetDir)" regsvr32 /s /c "$(TargetPath)" echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg" @@ -96,8 +96,8 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wininet.lib shlwapi.lib xerces-c_1.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win32\VC6\Debug" # Begin Custom Build - Performing registration OutDir=.\..\..\..\..\..\Build\Win32\xml4com\DebugU -TargetPath=\xml-xerces\c\Build\Win32\xml4com\DebugU\xerces-com.dll -InputPath=\xml-xerces\c\Build\Win32\xml4com\DebugU\xerces-com.dll +TargetPath=.\..\..\..\..\..\Build\Win32\xml4com\DebugU\xerces-com.dll +InputPath=.\..\..\..\..\..\Build\Win32\xml4com\DebugU\xerces-com.dll SOURCE="$(InputPath)" "$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" @@ -137,9 +137,9 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wininet.lib shlwapi.lib xerces-c_1.lib /nologo /subsystem:windows /dll /machine:I386 /libpath:"..\..\..\..\..\Build\Win32\VC6\Release" # Begin Custom Build - Performing registration OutDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinSize -TargetDir=\xml-xerces\c\Build\Win32\xml4com\ReleaseMinSize -TargetPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseMinSize\xerces-com.dll -InputPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseMinSize\xerces-com.dll +TargetDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinSize +TargetPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinSize\xerces-com.dll +InputPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinSize\xerces-com.dll SOURCE="$(InputPath)" BuildCmds= \ @@ -181,9 +181,9 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wininet.lib shlwapi.lib xerces-c_1.lib /nologo /subsystem:windows /dll /machine:I386 /libpath:"..\..\..\..\..\Build\Win32\VC6\Release" # Begin Custom Build - Performing registration OutDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinDependency -TargetDir=\xml-xerces\c\Build\Win32\xml4com\ReleaseMinDependency -TargetPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseMinDependency\xerces-com.dll -InputPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseMinDependency\xerces-com.dll +TargetDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinDependency +TargetPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinDependency\xerces-com.dll +InputPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseMinDependency\xerces-com.dll SOURCE="$(InputPath)" BuildCmds= \ @@ -225,9 +225,9 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wininet.lib shlwapi.lib xerces-c_1.lib /nologo /subsystem:windows /dll /machine:I386 /libpath:"..\..\..\..\..\Build\Win32\VC6\Release" # Begin Custom Build - Performing registration OutDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinSize -TargetDir=\xml-xerces\c\Build\Win32\xml4com\ReleaseUMinSize -TargetPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseUMinSize\xerces-com.dll -InputPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseUMinSize\xerces-com.dll +TargetDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinSize +TargetPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinSize\xerces-com.dll +InputPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinSize\xerces-com.dll SOURCE="$(InputPath)" BuildCmds= \ @@ -275,9 +275,9 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wininet.lib shlwapi.lib xerces-c_1.lib /nologo /subsystem:windows /dll /machine:I386 # Begin Custom Build - Performing registration OutDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinDependency -TargetDir=\xml-xerces\c\Build\Win32\xml4com\ReleaseUMinDependency -TargetPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseUMinDependency\xerces-com.dll -InputPath=\xml-xerces\c\Build\Win32\xml4com\ReleaseUMinDependency\xerces-com.dll +TargetDir=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinDependency +TargetPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinDependency\xerces-com.dll +InputPath=.\..\..\..\..\..\Build\Win32\xml4com\ReleaseUMinDependency\xerces-com.dll SOURCE="$(InputPath)" BuildCmds= \ @@ -426,6 +426,10 @@ SOURCE=..\..\..\..\..\src\com\XMLDOMUtil.h # End Source File # Begin Source File +SOURCE=..\..\..\..\..\src\com\XMLDOMXMLDecl.h +# End Source File +# Begin Source File + SOURCE=..\..\..\..\..\src\com\XMLHTTPRequest.h # End Source File # End Group @@ -509,6 +513,10 @@ SOURCE=..\..\..\..\..\src\com\XMLDOMUtil.cpp # End Source File # Begin Source File +SOURCE=..\..\..\..\..\src\com\XMLDOMXMLDecl.cpp +# End Source File +# Begin Source File + SOURCE=..\..\..\..\..\src\com\XMLHTTPRequest.cpp # End Source File # End Group diff --git a/src/com/IXMLDOMNodeImpl.h b/src/com/IXMLDOMNodeImpl.h index b3daab2ac..1f0c0666a 100644 --- a/src/com/IXMLDOMNodeImpl.h +++ b/src/com/IXMLDOMNodeImpl.h @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:56 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:28:54 andyh * COM Wrapper changes from Curt Arnold * @@ -77,8 +81,9 @@ // on the Directories tab on the dialog displayed after selecting Tools Options // from the Visual Studio IDE. // +// See http://xml.apache.org/xerces-c/build.html#BuildCOM #ifndef __IXMLDOMNode_INTERFACE_DEFINED__ -#error "xerces-dom requires an MSXML.H compatible with IE5 or later. See comments for directions to correct this problem." +#error "xerces-dom requires an MSXML.H compatible with IE5 or later. See http://xml.apache.org/xerces-c/build.html#BuildCOM for directions to correct this problem." #endif diff --git a/src/com/IXMLDOMNodeImpl.inl b/src/com/IXMLDOMNodeImpl.inl index 120c30903..f43aaeb58 100644 --- a/src/com/IXMLDOMNodeImpl.inl +++ b/src/com/IXMLDOMNodeImpl.inl @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:56 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:28:54 andyh * COM Wrapper changes from Curt Arnold * @@ -163,12 +167,16 @@ IXMLDOMNodeImpl<T,piid,plibid,wMajor,wMinor,tihclass>::get_parentNode(IXMLDOMNod if (NULL == pVal) return E_POINTER; + if(*pVal) (*pVal)->Release(); *pVal = NULL; HRESULT hr = S_OK; try { - hr = wrapNode(m_pIXMLDOMDocument, get_DOM_Node().getParentNode(),IID_IXMLDOMNode,reinterpret_cast<LPVOID *> (pVal)); + DOM_Node n = get_DOM_Node().getParentNode(); + if(!n.isNull()) { + hr = wrapNode(m_pIXMLDOMDocument, n,IID_IXMLDOMNode,reinterpret_cast<LPVOID *> (pVal)); + } } catch(...) { @@ -523,7 +531,8 @@ IXMLDOMNodeImpl<T,piid,plibid,wMajor,wMinor,tihclass>::removeChild(IXMLDOMNode * try { DOM_Node n = get_DOM_Node().removeChild(*pChildNode); - hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (oldChild)); + if(!n.isNull()) + hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (oldChild)); } catch(...) { @@ -648,7 +657,7 @@ IXMLDOMNodeImpl<T,piid,plibid,wMajor,wMinor,tihclass>::get_nodeTypeString(BSTR * if (NULL == pVal) return E_POINTER; - *pVal = ::SysAllocString(T2OLE(g_DomNodeName[get_DOMNodeType()])); + *pVal = ::SysAllocString(g_DomNodeName[get_DOMNodeType()]); return S_OK; } @@ -715,13 +724,15 @@ IXMLDOMNodeImpl<T,piid,plibid,wMajor,wMinor,tihclass>::put_text(BSTR newVal) return S_OK; } + template <class T, const IID* piid, const GUID* plibid, WORD wMajor,WORD wMinor, class tihclass> STDMETHODIMP IXMLDOMNodeImpl<T,piid,plibid,wMajor,wMinor,tihclass>::get_specified(VARIANT_BOOL *pVal) { ATLTRACE(_T("IXMLDOMNodeImpl::get_specified\n")); - return E_NOTIMPL; + *pVal = VARIANT_TRUE; + return S_OK; } template <class T, const IID* piid, const GUID* plibid, WORD wMajor,WORD wMinor, class tihclass> diff --git a/src/com/StdAfx.cpp b/src/com/StdAfx.cpp index 093a22d41..b37c3ed62 100644 --- a/src/com/StdAfx.cpp +++ b/src/com/StdAfx.cpp @@ -21,6 +21,6 @@ // from the Visual Studio IDE. // #ifndef __IXMLDOMNode_INTERFACE_DEFINED__ -#error "xerces-dom requires an MSXML.H compatible with IE5 or later. See comments for directions to correct this problem." +#error "xerces-dom requires an MSXML.H compatible with IE5 or later. See http://xml.apache.org/xerces-c/build.html#BuildCOM for directions to correct this problem." #endif diff --git a/src/com/XMLDOMAttribute.cpp b/src/com/XMLDOMAttribute.cpp index c45acb5a8..50ab697e3 100644 --- a/src/com/XMLDOMAttribute.cpp +++ b/src/com/XMLDOMAttribute.cpp @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.3 2000/06/19 20:05:57 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.2 2000/03/30 02:00:12 abagchi * Initial checkin of working code with Copyright Notice * @@ -128,3 +132,21 @@ STDMETHODIMP CXMLDOMAttribute::put_value(VARIANT newVal) return S_OK; } + // IXMLDOMNode method +STDMETHODIMP CXMLDOMAttribute::get_specified(VARIANT_BOOL *pVal) +{ + ATLTRACE(_T("CXMLDOMAttribute::get_specified\n")); + + try + { + *pVal = attr.getSpecified() ? VARIANT_TRUE : VARIANT_FALSE; + } + catch(...) + { + return E_FAIL; + } + + return S_OK; +} + + diff --git a/src/com/XMLDOMAttribute.h b/src/com/XMLDOMAttribute.h index 6ef509be4..b11bccd5a 100644 --- a/src/com/XMLDOMAttribute.h +++ b/src/com/XMLDOMAttribute.h @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:57 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:28:55 andyh * COM Wrapper changes from Curt Arnold * @@ -96,6 +100,10 @@ BEGIN_COM_MAP(CXMLDOMAttribute) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() + // IXMLDOMNode method + STDMETHOD(get_specified)(VARIANT_BOOL *pVal); + + // IXMLDOMAttribute methods STDMETHOD(get_name)(BSTR *pVal); STDMETHOD(get_value)(VARIANT *pVal); diff --git a/src/com/XMLDOMDocument.cpp b/src/com/XMLDOMDocument.cpp index 1e6cad71f..9abad9851 100644 --- a/src/com/XMLDOMDocument.cpp +++ b/src/com/XMLDOMDocument.cpp @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:57 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:28:57 andyh * COM Wrapper changes from Curt Arnold * @@ -131,6 +135,7 @@ CXMLDOMDocument::CXMLDOMDocument() ,m_xml (_T("")) ,m_bParseError (false) ,m_bThreadValidate (false) + ,m_bPreserveWhiteSpace (false) { } @@ -259,7 +264,15 @@ STDMETHODIMP CXMLDOMDocument::get_doctype(IXMLDOMDocumentType **pVal) if (NULL == pVal) return E_POINTER; + if(*pVal) (*pVal)->Release(); *pVal = NULL; + DOM_DocumentType doctype = m_Document.getDoctype(); + + // + // if the document had no doctype then return a null object + // + if(doctype.isNull()) + return S_OK; CXMLDOMDocumentTypeObj *pObj = NULL; HRESULT hr = CXMLDOMDocumentTypeObj::CreateInstance(&pObj); @@ -271,7 +284,7 @@ STDMETHODIMP CXMLDOMDocument::get_doctype(IXMLDOMDocumentType **pVal) try { - pObj->documentType = m_Document.getDoctype(); + pObj->documentType = doctype; } catch(...) { @@ -732,9 +745,9 @@ STDMETHODIMP CXMLDOMDocument::createNode(VARIANT TYPE, BSTR name, BSTR namespace if (VT_I4 == V_VT(&type)) nodeType = static_cast<DOMNodeType> (V_I4(&type)); else { - _bstr_t str = V_BSTR(&type); + OLECHAR* str = V_BSTR(&type); for (int i = 0; i < g_DomNodeNameSize; ++i) { - if (0 == lstrcmpi(str,g_DomNodeName[i])) { + if (0 == _wcsicmp(str,g_DomNodeName[i])) { nodeType = static_cast<DOMNodeType> (i); break; } @@ -1318,6 +1331,20 @@ UINT APIENTRY CXMLDOMDocument::ParseThread(void *pParm) } DOMParser parser; + + // + // If set to true then an node supporting IXMLDOMProcessingInstruction + // is added for the XML declaration. + // + // Setting to true in a custom DLL will better mimic + // MSXML.DLL but at a cost of conformance errors + // using David Brownell's suite + parser.setToCreateXMLDeclTypeNode(false); + + parser.setIncludeIgnorableWhitespace(pThis->m_bPreserveWhiteSpace); + + + if (!pThis->m_bParseError && !pThis->m_bAbort) parser.setDoValidation(pThis->m_bThreadValidate); @@ -1437,13 +1464,17 @@ STDMETHODIMP CXMLDOMDocument::get_preserveWhiteSpace(VARIANT_BOOL *pVal) if (NULL == pVal) return E_POINTER; - return E_NOTIMPL; + *pVal = (m_bPreserveWhiteSpace) ? VARIANT_TRUE : VARIANT_FALSE; + + return S_OK; } STDMETHODIMP CXMLDOMDocument::put_preserveWhiteSpace(VARIANT_BOOL newVal) { ATLTRACE(_T("CXMLDOMDocument::put_preserveWhiteSpace\n")); - return E_NOTIMPL; + m_bPreserveWhiteSpace = (VARIANT_TRUE == newVal) ? true : false; + return S_OK; + } STDMETHODIMP CXMLDOMDocument::put_onreadystatechange(VARIANT newVal) diff --git a/src/com/XMLDOMDocument.h b/src/com/XMLDOMDocument.h index e8d596deb..43f0fe7cb 100644 --- a/src/com/XMLDOMDocument.h +++ b/src/com/XMLDOMDocument.h @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:58 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:28:57 andyh * COM Wrapper changes from Curt Arnold * @@ -200,6 +204,7 @@ private: DOM_Document m_TmpDocument; bool m_bParseError; bool m_bThreadValidate; + bool m_bPreserveWhiteSpace; HRESULT GetBaseURL(_bstr_t &baseURL); diff --git a/src/com/XMLDOMElement.cpp b/src/com/XMLDOMElement.cpp index eb644ba85..8a323f70a 100644 --- a/src/com/XMLDOMElement.cpp +++ b/src/com/XMLDOMElement.cpp @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.3 2000/06/19 20:05:58 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.2 2000/03/30 02:00:11 abagchi * Initial checkin of working code with Copyright Notice * @@ -97,15 +101,17 @@ STDMETHODIMP CXMLDOMElement::getAttribute(BSTR name, VARIANT *pVal) return E_POINTER; ::VariantInit(pVal); - - try - { - V_VT(pVal) = VT_BSTR; - V_BSTR(pVal) = SysAllocString(element.getAttribute(name).rawBuffer()); - } - catch(...) - { - return E_FAIL; + V_VT(pVal) = VT_EMPTY; + + DOMString a = element.getAttribute(name); + if(a.length() > 0) { + try { + V_VT(pVal) = VT_BSTR; + V_BSTR(pVal) = SysAllocString(a.rawBuffer()); + } + catch(...) { + return E_FAIL; + } } return S_OK; @@ -154,19 +160,24 @@ STDMETHODIMP CXMLDOMElement::getAttributeNode(BSTR name, IXMLDOMAttribute **att if (NULL == attr) return E_POINTER; + if(*attr) (*attr)->Release(); *attr = NULL; + DOM_Attr attrNode(element.getAttributeNode(name)); + if(attrNode.isNull()) + return S_OK; + CXMLDOMAttributeObj *pObj = NULL; HRESULT hr = CXMLDOMAttributeObj::CreateInstance(&pObj); if (S_OK != hr) return hr; - + pObj->AddRef(); pObj->SetOwnerDoc(m_pIXMLDOMDocument); try { - pObj->attr = element.getAttributeNode(name); + pObj->attr = attrNode; } catch(...) { @@ -189,8 +200,28 @@ STDMETHODIMP CXMLDOMElement::setAttributeNode(IXMLDOMAttribute *attr, IXMLDOMAt if (NULL == attr || NULL == attributeNode) return E_POINTER; + if(*attributeNode) (*attributeNode)->Release(); *attributeNode = NULL; + long id = 0; + IIBMXMLDOMNodeIdentity* nodeID = NULL; + if(SUCCEEDED(attr->QueryInterface(IID_IIBMXMLDOMNodeIdentity,(void**) &nodeID))) { + nodeID->get_NodeId(&id); + nodeID->Release(); + } + + DOM_Attr attrNode; + try { + attrNode = (element.setAttributeNode(*((DOM_Attr*) id))); + if(attrNode.isNull()) + return S_OK; + } + catch(...) { + return E_FAIL; + } + + + CXMLDOMAttributeObj *pObj = NULL; HRESULT hr = CXMLDOMAttributeObj::CreateInstance(&pObj); if (S_OK != hr) @@ -201,7 +232,7 @@ STDMETHODIMP CXMLDOMElement::setAttributeNode(IXMLDOMAttribute *attr, IXMLDOMAt try { - pObj->attr = element.setAttributeNode(((CXMLDOMAttribute*) attr)->attr); + pObj->attr = element.setAttributeNode(attrNode); } catch(...) { @@ -236,7 +267,13 @@ STDMETHODIMP CXMLDOMElement::removeAttributeNode(IXMLDOMAttribute *attr, IXMLDO try { - pObj->attr = element.removeAttributeNode(((CXMLDOMAttribute*) attr)->attr); + long id = 0; + IIBMXMLDOMNodeIdentity* nodeID = NULL; + if(SUCCEEDED(attr->QueryInterface(IID_IIBMXMLDOMNodeIdentity,(void**) &nodeID))) { + nodeID->get_NodeId(&id); + nodeID->Release(); + } + pObj->attr = element.removeAttributeNode(*((DOM_Attr*) id)); } catch(...) { diff --git a/src/com/XMLDOMNamedNodeMap.cpp b/src/com/XMLDOMNamedNodeMap.cpp index 4f19f9905..b7164af8b 100644 --- a/src/com/XMLDOMNamedNodeMap.cpp +++ b/src/com/XMLDOMNamedNodeMap.cpp @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.3 2000/06/19 20:05:58 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.2 2000/03/30 01:59:11 abagchi * Initial checkin of working code with Copyright Notice * @@ -84,7 +88,9 @@ STDMETHODIMP CXMLDOMNamedNodeMap::getNamedItem(BSTR name, IXMLDOMNode **pVal) try { - hr = wrapNode(m_pIXMLDOMDocument,m_container.getNamedItem(name),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + DOM_Node n = m_container.getNamedItem(name); + if(!n.isNull()) + hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } catch(...) { @@ -126,7 +132,9 @@ STDMETHODIMP CXMLDOMNamedNodeMap::setNamedItem(IXMLDOMNode *newItem, IXMLDOMNod { DOMString name = pNewItemNode->getNodeName(); m_container.setNamedItem(*pNewItemNode); - hr = wrapNode(m_pIXMLDOMDocument,m_container.getNamedItem(name),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + DOM_Node n = m_container.getNamedItem(name); + if(!n.isNull()) + hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } catch(...) { @@ -151,11 +159,15 @@ STDMETHODIMP CXMLDOMNamedNodeMap::removeNamedItem(BSTR name, IXMLDOMNode **pVal try { - hr = wrapNode(m_pIXMLDOMDocument,m_container.removeNamedItem(name),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + DOM_Node n = m_container.removeNamedItem(name); + if(!n.isNull()) + hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } + // + // if we had a failure, return success anyway + // catch(...) { - return E_FAIL; } return hr; @@ -177,10 +189,8 @@ STDMETHODIMP CXMLDOMNamedNodeMap::get_item(long index, IXMLDOMNode **pVal) return E_INVALIDARG; long length = m_container.getLength(); - if (index >= length) - return E_INVALIDARG; - - hr = wrapNode(m_pIXMLDOMDocument,m_container.item(index),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + if (index < length) + hr = wrapNode(m_pIXMLDOMDocument,m_container.item(index),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } catch(...) { @@ -230,7 +240,9 @@ STDMETHODIMP CXMLDOMNamedNodeMap::getQualifiedItem(BSTR baseName, BSTR namespace try { - hr = wrapNode(m_pIXMLDOMDocument,m_container.getNamedItemNS(namespaceURI,baseName),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + DOM_Node n = m_container.getNamedItemNS(namespaceURI,baseName); + if(!n.isNull()) + hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } catch(...) { @@ -256,7 +268,9 @@ STDMETHODIMP CXMLDOMNamedNodeMap::removeQualifiedItem(BSTR baseName, BSTR namesp try { - hr = wrapNode(m_pIXMLDOMDocument,m_container.removeNamedItemNS(namespaceURI,baseName),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + DOM_Node n = m_container.removeNamedItemNS(namespaceURI,baseName); + if(!n.isNull()) + hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } catch(...) { @@ -288,7 +302,9 @@ STDMETHODIMP CXMLDOMNamedNodeMap::nextNode(IXMLDOMNode **pVal) try { - hr = wrapNode(m_pIXMLDOMDocument,m_container.item(m_NextNodeIndex),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + DOM_Node n = m_container.item(m_NextNodeIndex); + if(!n.isNull()) + hr = wrapNode(m_pIXMLDOMDocument,n,IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } catch(...) { diff --git a/src/com/XMLDOMNodeList.cpp b/src/com/XMLDOMNodeList.cpp index 28fb83847..203432561 100644 --- a/src/com/XMLDOMNodeList.cpp +++ b/src/com/XMLDOMNodeList.cpp @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.3 2000/06/19 20:05:58 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.2 2000/03/30 02:00:10 abagchi * Initial checkin of working code with Copyright Notice * @@ -76,6 +80,7 @@ STDMETHODIMP CXMLDOMNodeList::get_item(long index, IXMLDOMNode **pVal) if (NULL == pVal) return E_POINTER; + if(*pVal) (*pVal)->Release(); *pVal = NULL; HRESULT hr = S_OK; @@ -85,10 +90,12 @@ STDMETHODIMP CXMLDOMNodeList::get_item(long index, IXMLDOMNode **pVal) return E_INVALIDARG; long length = m_container.getLength(); - if (index >= length) - return E_INVALIDARG; - - hr = wrapNode(m_pIXMLDOMDocument,m_container.item(index),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); + // + // if index is beyond end + // return a null object not an exception + // + if (index < length) + hr = wrapNode(m_pIXMLDOMDocument,m_container.item(index),IID_IXMLDOMNode, reinterpret_cast<LPVOID *> (pVal)); } catch(...) { diff --git a/src/com/XMLDOMUtil.cpp b/src/com/XMLDOMUtil.cpp index aa2478379..49cc6d33e 100644 --- a/src/com/XMLDOMUtil.cpp +++ b/src/com/XMLDOMUtil.cpp @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:59 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:29:02 andyh * COM Wrapper changes from Curt Arnold * @@ -78,28 +82,29 @@ #include "XMLDOMDocumentType.h" #include "XMLDOMDocumentFragment.h" #include "XMLDOMNotation.h" +#include "XMLDOMXMLDecl.h" #include "XMLDOMUtil.h" #include <util/PlatformUtils.hpp> -const TCHAR* g_DomNodeName[] = +const OLECHAR* g_DomNodeName[] = { - _T("invalid"), - _T("element"), - _T("attribute"), - _T("text"), - _T("cdatasection"), - _T("entityreference"), - _T("entity"), - _T("processinginstruction"), - _T("comment"), - _T("document"), - _T("documenttype"), - _T("documentfragment"), - _T("notation") + OLESTR("invalid"), + OLESTR("element"), + OLESTR("attribute"), + OLESTR("text"), + OLESTR("cdatasection"), + OLESTR("entityreference"), + OLESTR("entity"), + OLESTR("processinginstruction"), + OLESTR("comment"), + OLESTR("document"), + OLESTR("documenttype"), + OLESTR("documentfragment"), + OLESTR("notation") }; -const int g_DomNodeNameSize = sizeof(g_DomNodeName) / sizeof(TCHAR*); +const int g_DomNodeNameSize = sizeof(g_DomNodeName) / sizeof(OLECHAR*); void GetText(const DOM_Node& node, _bstr_t &text) { @@ -651,6 +656,34 @@ HRESULT wrapNode(IXMLDOMDocument *pDoc, DOM_Node& node, REFIID iid, LPVOID *pVal pObj->Release(); break; } + + case DOM_Node::XML_DECL_NODE: + { + CXMLDOMXMLDeclObj *pObj = NULL; + hr = CXMLDOMXMLDeclObj::CreateInstance(&pObj); + if (S_OK != hr) + return hr; + + pObj->AddRef(); + pObj->SetOwnerDoc(pDoc); + + try + { + pObj->xmlDecl = *(static_cast<DOM_XMLDecl*> (&node)); + } + catch(...) + { + pObj->Release(); + return E_FAIL; + } + + hr = pObj->QueryInterface(iid, pVal); + if (S_OK != hr) + *pVal = NULL; + + pObj->Release(); + break; + } default: hr = E_NOTIMPL; break; diff --git a/src/com/XMLDOMUtil.h b/src/com/XMLDOMUtil.h index 7a4385257..b890f0a67 100644 --- a/src/com/XMLDOMUtil.h +++ b/src/com/XMLDOMUtil.h @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:59 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:29:03 andyh * COM Wrapper changes from Curt Arnold * @@ -69,7 +73,7 @@ class DOM_Node; -extern const TCHAR* g_DomNodeName[]; +extern const OLECHAR* g_DomNodeName[]; extern const int g_DomNodeNameSize; void GetXML (const DOM_Node &node, _bstr_t &text); diff --git a/src/com/XMLDOMXMLDecl.cpp b/src/com/XMLDOMXMLDecl.cpp new file mode 100644 index 000000000..13cb0cd8b --- /dev/null +++ b/src/com/XMLDOMXMLDecl.cpp @@ -0,0 +1,166 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999-2000 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Xerces" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache\@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation, and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.ibm.com . For more information + * on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ + + +#include "stdafx.h" +#include "xml4com.h" +#include "XMLDOMXMLDecl.h" + +// IXMLDOMProcessingInstruction methods +STDMETHODIMP CXMLDOMXMLDecl::get_target(BSTR *pVal) +{ + ATLTRACE(_T("CXMLDOMXMLDecl::get_target\n")); + + if (NULL == pVal) + return E_POINTER; + + *pVal = NULL; + + try + { + *pVal = SysAllocString(OLESTR("xml")); + } + catch(...) + { + return E_FAIL; + } + + return S_OK; +} + +STDMETHODIMP CXMLDOMXMLDecl::get_data(BSTR *pVal) +{ + ATLTRACE(_T("CXMLDOMXMLDecl::get_data\n")); + + if (NULL == pVal) + return E_POINTER; + + *pVal = NULL; + + try + { + unsigned int len= 0; + unsigned int totalLen = 0; + DOMString version(xmlDecl.getVersion()); + len = version.length(); + if(len > 0) totalLen = len + 10; + + DOMString standalone(xmlDecl.getStandalone()); + len = standalone.length(); + if(len > 0) { + if(totalLen > 0) + totalLen += len + 14; + else + totalLen = len + 13; + } + + DOMString encoding(xmlDecl.getEncoding()); + len = encoding.length(); + if(len > 0) { + if(totalLen > 0) + totalLen += len + 13; + else + totalLen = len + 12; + } + + *pVal = SysAllocStringLen(NULL,totalLen+1); + **pVal = 0; + + len = version.length(); + totalLen = len; + if(len > 0) { + wcscpy(*pVal,OLESTR("version=\"")); + wcscat(*pVal,version.rawBuffer()); + wcscat(*pVal,OLESTR("\"")); + } + + len = standalone.length(); + if(len > 0) { + if(totalLen > 0) + wcscat(*pVal,OLESTR(" standalone=\"")); + else + wcscat(*pVal,OLESTR("standalone=\"")); + wcscat(*pVal,standalone.rawBuffer()); + wcscat(*pVal,OLESTR("\"")); + totalLen += len; + } + + len = encoding.length(); + if(len > 0) { + if(totalLen > 0) + wcscat(*pVal,OLESTR(" encoding=\"")); + else + wcscat(*pVal,OLESTR("encoding=\"")); + wcscat(*pVal,encoding.rawBuffer()); + wcscat(*pVal,OLESTR("\"")); + } + + } + catch(...) + { + return E_FAIL; + } + + return S_OK; + +} + +STDMETHODIMP CXMLDOMXMLDecl::put_data(BSTR newVal) +{ + ATLTRACE(_T("CXMLDOMXMLDecl::put_data\n")); + + return E_NOTIMPL; +} diff --git a/src/com/XMLDOMXMLDecl.h b/src/com/XMLDOMXMLDecl.h new file mode 100644 index 000000000..93a95e6b1 --- /dev/null +++ b/src/com/XMLDOMXMLDecl.h @@ -0,0 +1,100 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999-2000 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Xerces" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache\@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation, and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.ibm.com . For more information + * on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ + + +#ifndef ___xmldomxmldecl_h___ +#define ___xmldomxmldecl_h___ + +#include <dom/DOM_XMLDecl.hpp> +#include "IXMLDOMNodeImpl.h" + +class ATL_NO_VTABLE CXMLDOMXMLDecl : + public CComObjectRootEx<CComSingleThreadModel>, + public IXMLDOMNodeImpl<IXMLDOMProcessingInstruction, &IID_IXMLDOMProcessingInstruction, &LIBID_Xerces> +{ +public: + CXMLDOMXMLDecl() + {} + + void FinalRelease() + { + ReleaseOwnerDoc(); + } + + virtual DOM_Node& get_DOM_Node() { return xmlDecl;} + virtual DOMNodeType get_DOMNodeType() const { return NODE_PROCESSING_INSTRUCTION; } + +DECLARE_NOT_AGGREGATABLE(CXMLDOMXMLDecl) +DECLARE_PROTECT_FINAL_CONSTRUCT() + +BEGIN_COM_MAP(CXMLDOMXMLDecl) + COM_INTERFACE_ENTRY(IXMLDOMProcessingInstruction) + COM_INTERFACE_ENTRY(IXMLDOMNode) + COM_INTERFACE_ENTRY(IIBMXMLDOMNodeIdentity) + COM_INTERFACE_ENTRY(IDispatch) +END_COM_MAP() + + // IXMLDOMProcessingInstruction methods + STDMETHOD(get_target)(BSTR *pVal); + STDMETHOD(get_data)(BSTR *pVal); + STDMETHOD(put_data)(BSTR newVal); + + DOM_XMLDecl xmlDecl; +}; + +typedef CComObject<CXMLDOMXMLDecl> CXMLDOMXMLDeclObj; + +#endif // ___xmldomprocessinginstruction_h___ \ No newline at end of file diff --git a/src/com/xml4com.cpp b/src/com/xml4com.cpp index 8f7346e68..6390d4801 100644 --- a/src/com/xml4com.cpp +++ b/src/com/xml4com.cpp @@ -56,6 +56,10 @@ /* * $Log$ + * Revision 1.4 2000/06/19 20:05:59 rahulj + * Changes for increased conformance and stability. Submitted by + * Curt.Arnold@hyprotech.com. Verified by Joe Polastre. + * * Revision 1.3 2000/06/03 00:29:04 andyh * COM Wrapper changes from Curt Arnold * @@ -93,17 +97,104 @@ #include <util/PlatformUtils.hpp> #include "xml4com.h" + // -// This file is generated from the type library compilation -// of xmldom.idl // -// The define prevent the Microsoft versions of DOMDocument -// and HTTPRequest from causing symbol clashes with ours -#define CLSID_DOMDocument CLSID_MSDOMDocument -#define CLSID_XMLHTTPRequest CLSID_MSXMLHTTPRequest -#include "msxml_i.c" -#undef CLSID_DOMDocument -#undef CLSID_XMLHTTPRequest +// These were extracted from an identifier definition file +// generated by compiling MSXML.IDL using the MIDL compiler +// (and removing CLSID_DOMDocument, CLSID_XMLHttpRequest, et al) +// +const IID LIBID_MSXML = {0xd63e0ce2,0xa0a2,0x11d0,{0x9c,0x02,0x00,0xc0,0x4f,0xc9,0x9c,0x8e}}; + + +const IID IID_IXMLDOMImplementation = {0x2933BF8F,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMNode = {0x2933BF80,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMDocumentFragment = {0x3efaa413,0x272f,0x11d2,{0x83,0x6f,0x00,0x00,0xf8,0x7a,0x77,0x82}}; + + +const IID IID_IXMLDOMDocument = {0x2933BF81,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMNodeList = {0x2933BF82,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMNamedNodeMap = {0x2933BF83,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMCharacterData = {0x2933BF84,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMAttribute = {0x2933BF85,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMElement = {0x2933BF86,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMText = {0x2933BF87,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMComment = {0x2933BF88,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMProcessingInstruction = {0x2933BF89,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMCDATASection = {0x2933BF8A,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMDocumentType = {0x2933BF8B,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMNotation = {0x2933BF8C,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMEntity = {0x2933BF8D,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMEntityReference = {0x2933BF8E,0x7B36,0x11d2,{0xB2,0x0E,0x00,0xC0,0x4F,0x98,0x3E,0x60}}; + + +const IID IID_IXMLDOMParseError = {0x3efaa426,0x272f,0x11d2,{0x83,0x6f,0x00,0x00,0xf8,0x7a,0x77,0x82}}; + + +const IID IID_IXTLRuntime = {0x3efaa425,0x272f,0x11d2,{0x83,0x6f,0x00,0x00,0xf8,0x7a,0x77,0x82}}; + + +const IID DIID_XMLDOMDocumentEvents = {0x3efaa427,0x272f,0x11d2,{0x83,0x6f,0x00,0x00,0xf8,0x7a,0x77,0x82}}; + + + +const IID IID_IXMLHttpRequest = {0xED8C108D,0x4349,0x11D2,{0x91,0xA4,0x00,0xC0,0x4F,0x79,0x69,0xE8}}; + + +const IID IID_IXMLDSOControl = {0x310afa62,0x0575,0x11d2,{0x9c,0xa9,0x00,0x60,0xb0,0xec,0x3d,0x39}}; + + +const IID IID_IXMLElementCollection = {0x65725580,0x9B5D,0x11d0,{0x9B,0xFE,0x00,0xC0,0x4F,0xC9,0x9C,0x8E}}; + + +const IID IID_IXMLDocument = {0xF52E2B61,0x18A1,0x11d1,{0xB1,0x05,0x00,0x80,0x5F,0x49,0x91,0x6B}}; + + +const IID IID_IXMLDocument2 = {0x2B8DE2FE,0x8D2D,0x11d1,{0xB2,0xFC,0x00,0xC0,0x4F,0xD9,0x15,0xA9}}; + + +const IID IID_IXMLElement = {0x3F7F31AC,0xE15F,0x11d0,{0x9C,0x25,0x00,0xC0,0x4F,0xC9,0x9C,0x8E}}; + + +const IID IID_IXMLElement2 = {0x2B8DE2FF,0x8D2D,0x11d1,{0xB2,0xFC,0x00,0xC0,0x4F,0xD9,0x15,0xA9}}; + + +const IID IID_IXMLAttribute = {0xD4D4A0FC,0x3B73,0x11d1,{0xB2,0xB4,0x00,0xC0,0x4F,0xB9,0x25,0x96}}; + + +const IID IID_IXMLError = {0x948C5AD3,0xC58D,0x11d0,{0x9C,0x0B,0x00,0xC0,0x4F,0xC9,0x9C,0x8E}}; + + // // This file is generated from the type library compilation diff --git a/src/com/xml4com.idl b/src/com/xml4com.idl index b007cea88..d3b691405 100644 --- a/src/com/xml4com.idl +++ b/src/com/xml4com.idl @@ -74,7 +74,38 @@ library Xerces importlib("stdole32.tlb"); importlib("stdole2.tlb"); + // + // it appears to be necessary to forward declare + // this interface to lure it into the type library + interface IXMLDOMNotation; + // + // might as well insure the rest we use are here + // + interface IXMLDOMAttribute; + interface IXMLDOMCDATASection; + interface IXMLDOMComment; + interface IXMLDOMDocument; + interface IXMLDOMDocumentType; + interface IXMLDOMElement; + interface IXMLDOMEntity; + interface IXMLDOMEntityReference; + interface IXMLDOMImplementation; + interface IXMLDOMNamedNodeMap; + interface IXMLDOMNodeList; + interface IXMLDOMParseError; + interface IXMLDOMProcessingInstruction; + interface IXMLDOMText; + interface IXMLHttpRequest; + + + // + // + // if you get an "Cannot open input file" error here + // then you most probably do not have a recent + // Microsoft Platform SDK in your include path + // + // See http://xml.apache.org/xerces-c/build.html#BuildCOM import "xmldom.idl"; [ diff --git a/src/com/xmldocument.rgs b/src/com/xmldocument.rgs index f9a97a773..28a9b9a19 100644 --- a/src/com/xmldocument.rgs +++ b/src/com/xmldocument.rgs @@ -1,20 +1,20 @@ HKCR { - IBMXML.XMLDOMDocument.1 = s 'IBM XML Parser for COM Class' + Xerces.DOMDocument.1.2 = s 'Apache Xerces Parser for COM' { CLSID = s '{79516F6F-3AEA-11D3-BC47-0004ACB7DBEB}' } - IBMXML.XMLDOMDocument = s 'IBM XML Parser for COM Class' + Xerces.DOMDocument = s 'Apache Xerces Parser For COM' { CLSID = s '{79516F6F-3AEA-11D3-BC47-0004ACB7DBEB}' - CurVer = s 'IBMXML.XMLDOMDocument.1' + CurVer = s 'Xerces.DOMDocument.1.2' } NoRemove CLSID { - ForceRemove {79516F6F-3AEA-11D3-BC47-0004ACB7DBEB} = s 'IBM XML Parser for COM Class' + ForceRemove {79516F6F-3AEA-11D3-BC47-0004ACB7DBEB} = s 'Apache Xerces Parser for COM' { - ProgID = s 'IBMXML.XMLDOMDocument.1' - VersionIndependentProgID = s 'IBMXML.XMLDOMDocument' + ProgID = s 'Xerces.DOMDocument.1.2' + VersionIndependentProgID = s 'Xerces.DOMDocument' ForceRemove 'Programmable' InprocServer32 = s '%XMLMODULE%' { diff --git a/src/com/xmlhttprequest.rgs b/src/com/xmlhttprequest.rgs index f4090b420..2ebb02179 100644 --- a/src/com/xmlhttprequest.rgs +++ b/src/com/xmlhttprequest.rgs @@ -1,20 +1,20 @@ HKCR { - IBMXML.XMLHttpRequest.1 = s 'IBM XML Http Request' + IBMXML.XMLHttpRequest.1.2 = s 'Apache Xerces XML Http Request' { CLSID = s '{1C598E82-9AB9-456b-9C24-D711F08F3584}' } - IBMXML.XMLHttpRequest = s 'IBM XML Http Request' + IBMXML.XMLHttpRequest = s 'Apache Xerces XML Http Request' { CLSID = s '{1C598E82-9AB9-456b-9C24-D711F08F3584}' - CurVer = s 'IBMXML.XMLHttpRequest.1' + CurVer = s 'Xerces.XMLHttpRequest.1.2' } NoRemove CLSID { - ForceRemove {1C598E82-9AB9-456b-9C24-D711F08F3584} = s 'IBM XML Http Request' + ForceRemove {1C598E82-9AB9-456b-9C24-D711F08F3584} = s 'Apache Xerces XML Http Request' { - ProgID = s 'IBMXML.XMLHttpRequest.1' - VersionIndependentProgID = s 'IBMXML.XMLHttpRequest' + ProgID = s 'Xerces.XMLHttpRequest.1.2' + VersionIndependentProgID = s 'Xerces.XMLHttpRequest' ForceRemove 'Programmable' InprocServer32 = s '%XMLMODULE%' { -- GitLab