微软公开 XML 核心解析服务器的源代码
微软 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.
相关资讯:
·微软通用序列号(转载) (733字)
·微软下一代Hotmail预览 Flash版
·微软将停止提供Windows NT安全外技术支持
·据消息称微软将于几周内发布Windows XP SP2
·离开微软实在情非得已 唐骏离职投奔国产linux
·唐骏首次回应传闻 否认将离开微软搞Linux
·微软下大力改进Windows系统的搜索能力
·微软NetMeeting功成身退 LM取而代之
·微软产品将采用反垃圾邮件技术
·巴尔默:面对Linux 微软第一次存在价格劣势
相关软件:
→ 特别推荐
→ 热点TOP10
我为人人《《==》》人人为我
关于我们 |
帮助(?)|
广告服务 |
版权声明 |
商业合作 |
发展历程 |
加盟我们 |
联系我们
Copyright (C) 1998-2004 winzheng.com All Rights Reserved.
特别感谢 蓝芒科技 提供下载站及论坛服务器
当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。