微软公开 XML 核心解析服务器的源代码
|
jay
禁止访问 著名写手
西北先进性教育处处长
|
[1楼]
大 中
小 发表于 2004-2-29 11:53 只看该作者
微软公开 XML 核心解析服务器的源代码随着一声『玉皇大帝到』,从天上掉下一滴甘露正好落在你的嘴唇上!
你在恍惚中看见了16两黄金。 微软 XML 核心解析服务器的一部分源代码。 属微软公开发表。 谁说微软不开源,呵呵 // =========================================================================== // Implementation of server-side object that gathers XML data and // processes it by combining with the appropriate XSL transform. // // Copyright (c) Microsoft Corporation. All rights reserved. #pragma once #include "PIParse.h" // =========================================================================== // CLASS: CXMLServerDocument // // Server-side object that accumulates XML, then transforms it via request- // specific XSL. class CResponseOrStream; class ATL_NO_VTABLE CXMLServerDocument : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CXMLServerDocument, &CLSID_XMLServerDocument>, public IDispatchImpl<IXMLServerDocument, &IID_IXMLServerDocument, &LIBID_X SLISAPI2Lib> { public: DECLARE_REGISTRY_RESOURCEID(IDR_XMLSERVERDOCUMENT) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CXMLServerDocument) COM_INTERFACE_ENTRY(IXMLServerDocument) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() public: CXMLServerDocument(); HRESULT SetErrorToLastCOMError(wchar_t *pwszURL); // IXMLServerDocument STDMETHOD(put_URL)(/*[in]*/ BSTR bstrURL); STDMETHOD(put_UserAgent)(/*[in]*/ BSTR bstrUserAgent); STDMETHOD(put_ServerConfigFile)(/*[in]*/ BSTR bstrServerConfigFile); STDMETHOD(put_SingleXSLFile)(/*[in]*/ BSTR bstrSingleXSLFile); STDMETHOD(put_ServerSupportFunctions)( /*[in]*/ IXMLServerDocumentSupportFunctions *supportFunctions); STDMETHOD(Transform)(IDispatch * pdispResponse); STDMETHOD(TransformEx)(IUnknown *pIncomingXMLStream, IUnknown *punkOutput); STDMETHOD(HandleError)(IUnknown * punkOutput); STDMETHOD(Load)(BSTR bstrFileName); STDMETHOD(Write)(BSTR bstrText); STDMETHOD(End)(); STDMETHOD(Flush)(); STDMETHOD(Clear)(); STDMETHOD(WriteLine)(BSTR bstrLine); // Errors may be set on this object by other classes. (Note that // these incoming BSTRs can just be wchar_t*'s.) STDMETHOD(SetError)(BSTR errorString, BSTR errorURL, BSTR errorHTTPCode); STDMETHOD(ClearError()); private: HRESULT EnsureXMLDocumentObject(bool bAcquireStream); HRESULT EnsureAspServerObject(); HRESULT WriteToXML(BSTR bstrLine, bool bAddCR); HRESULT WriteIdentityXML(CResponseOrStream & responseOrStream); HRESULT LoadMasterConfig(CComBSTR & bstrSpecialPIAttrib); HRESULT GetServerConfig(IXMLDOMDocument **pServerConfig); HRESULT GetDoctype(); HRESULT InitializeBrowserCapAndAttribs(); HRESULT ExtractStylesheets(IXMLDOMDocument *pServerConfig, CComBSTR arrStylesheets[], short *pNumStylesheets); HRESULT PullStylesheetsFromDeviceInfo(IXMLDOMNode *pServerConfig, CComBSTR arrStylesheets[], short *pNumStylesheets); HRESULT ApplyStylesheets(CResponseOrStream & responseOrStream, CComBSTR arrStylesheets[], short numStylesheets); HRESULT LoadXMLFromRelativeLoc(BSTR localName, BSTR pathName, bool isConfigXML, IXMLDOMDocument **ppXMLDoc, IXSLTemplate **ppXSLTemplate); HRESULT VerifyEncodingAndCharset(UINT *puiCP); HRESULT GrabFromBrowserCap(wchar_t *pwszAttrib, wchar_t *pwszDefault, CComBSTR & destination); private: CComBSTR m_bstrURL; CComBSTR m_bstrURLServerConfig; CComBSTR m_bstrURLDirectory; CComBSTR m_bstrConfigDirectory; CComBSTR m_bstrContentType; CComBSTR m_bstrDoctypeName; CComBSTR m_bstrEncoding; CComBSTR m_bstrCharset; CComBSTR m_bstrErrorDescrip; CComBSTR m_bstrErrorURL; CComBSTR m_bstrErrorHTTPCode; CComBSTR m_bstrUserAgent; CComBSTR m_bstrSingleXSLStylesheetFile; CComPtr<IXMLDOMDocument> m_pcomXMLDocument; CComPtr<IStream> m_pcomXMLDocumentStream; CComPtr<IXMLDOMDocument> m_pcomTransformConfig; CComPtr<IXMLDOMDocument> m_pcomSingleXSLFile; CComPtr<asp::IServer> m_pcomASPServer; CComPtr<IDispatch> m_pcomBrowserTypeDisp; CComPtr<IXMLServerDocumentSupportFunctions> m_pcomSupportFunctions; PIParseInfo m_piParseInfo; bool m_bInErrorHandling; bool m_bResponseEndCalled; bool m_bServerConfigSetExplicitly; bool m_bForbidDriveSpecification; bool m_bBrowserCapsInitialized; }; 其他微软 XML 核心解析服务器源代码清单 StdAfx.h Main location for include files XmlServerDoc.{h,cpp,rgs} Main logic for stylesheet selection and XSL processing. PreProcess.{h,cpp} Convert PASP file into ASP file ASPPreProcessor.{h,cpp,rgs} Request broker for preprocessing tasks, also determines whether preprocessing is necessary. ProcessingStream.h Post-processing Xmlcache.{h,cpp}, hashtable.{h,cpp} Implements simple in-memory cache for XML documents (and IXSLTemplates) Utils.{h,cpp} Utilities for: XML, ASP, error handling, string operations, debugging Charset.{h,cpp} Utilities for character set and encoding issues. PIParse.{h,cpp} Simple class for parsing XML processing instructions. IncludeFile*.{h,cpp} Support for the PASP include file functionality. |
|
TOP |








