维以不永伤 大约46分钟前 无聊 的说 无聊中发烧 这都可以   zdk6105 大约4小时前 高兴 的说 哈哈哈,偶遇知己,欣喜无比   zhouchunyan 大约4小时前 平静 的说 算了,保持心情平静~~~~~~~   zdk6105 大约7小时前 无聊 的说 这个周末真无聊,明天又开始上班了,怎么比在山里还寂寞?   wxhua5 大约8小时前 高兴 的说 哈哈这个啊,好玩,社区加油啊   zdk6105 大约9小时前 高兴 的说 月下听蝉,不错,我记住了   王子的微笑 大约10小时前 平静 的说 感冒了,难受啊   zdk6105 大约22小时前 思念 的说 很久没来了,竟然添了新功能,试下,呵呵,朋友们都还好吗?   手插口袋 9月6日 平静 的说 残奥会开始了 快了   未无朝夕 9月6日 郁闷 的说 现在是半夜12点56分,外面狂风暴雨,听说飓风已经临近,楼下音乐巨大声,还让不让人活了   [查看全部 200 条唧唧歪歪...]


打印

微软公开 XML 核心解析服务器的源代码

微软公开 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