You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
4.2 KiB
191 lines
4.2 KiB
//////////////////////////////////////////////////////////////////////
|
|
// XMLReader.h : Declaration of CXMLContent
|
|
// Copyright (c)1997-2001 Microsoft Corporation
|
|
//
|
|
// Original Create Date: 5/25/2001
|
|
// Original Author: shawnwu
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include "globals.h"
|
|
|
|
/*
|
|
|
|
Class description
|
|
|
|
Naming:
|
|
|
|
CXMLContent stands for XML Content handler.
|
|
|
|
Base class:
|
|
|
|
(1) CComObjectRootEx for threading model and IUnknown.
|
|
|
|
(2) ISAXContentHandler which implements handler.
|
|
|
|
Purpose of class:
|
|
|
|
(1) To support reading of XML file content handler. This handles events sent
|
|
by MSXML parser.
|
|
|
|
Design:
|
|
|
|
(1) Just a typical COM object.
|
|
|
|
Use:
|
|
|
|
(1) Just call the static function.
|
|
|
|
|
|
*/
|
|
|
|
#include <msxml2.h>
|
|
|
|
|
|
class ATL_NO_VTABLE CXMLContent :
|
|
public CComObjectRootEx<CComMultiThreadModel>,
|
|
public ISAXContentHandler
|
|
{
|
|
protected:
|
|
CXMLContent();
|
|
virtual ~CXMLContent();
|
|
|
|
public:
|
|
|
|
BEGIN_COM_MAP(CXMLContent)
|
|
COM_INTERFACE_ENTRY(ISAXContentHandler)
|
|
END_COM_MAP()
|
|
|
|
DECLARE_NOT_AGGREGATABLE( CXMLContent )
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_NETSECPROV)
|
|
|
|
public:
|
|
|
|
//
|
|
// ISAXContentHandler
|
|
//
|
|
|
|
STDMETHOD(startElement) (
|
|
IN const wchar_t * pwchNamespaceUri,
|
|
IN int cchNamespaceUri,
|
|
IN const wchar_t * pwchLocalName,
|
|
IN int cchLocalName,
|
|
IN const wchar_t * pwchQName,
|
|
IN int cchQName,
|
|
IN ISAXAttributes * pAttributes
|
|
);
|
|
|
|
STDMETHOD(endElement) (
|
|
IN const wchar_t * pwchNamespaceUri,
|
|
IN int cchNamespaceUri,
|
|
IN const wchar_t * pwchLocalName,
|
|
IN int cchLocalName,
|
|
IN const wchar_t * pwchQName,
|
|
IN int cchQName
|
|
);
|
|
|
|
STDMETHOD(startDocument) ();
|
|
|
|
|
|
STDMETHOD(endDocument) ();
|
|
|
|
STDMETHOD(putDocumentLocator) (
|
|
IN ISAXLocator *pLocator
|
|
);
|
|
|
|
|
|
STDMETHOD(startPrefixMapping) (
|
|
IN const wchar_t * pwchPrefix,
|
|
IN int cchPrefix,
|
|
IN const wchar_t * pwchUri,
|
|
IN int cchUri
|
|
);
|
|
|
|
STDMETHOD(endPrefixMapping) (
|
|
IN const wchar_t * pwchPrefix,
|
|
IN int cchPrefix
|
|
);
|
|
|
|
STDMETHOD(characters) (
|
|
IN const wchar_t * pwchChars,
|
|
IN int cchChars
|
|
);
|
|
|
|
STDMETHOD(ignorableWhitespace) (
|
|
IN const wchar_t * pwchChars,
|
|
IN int cchChars
|
|
);
|
|
|
|
STDMETHOD(processingInstruction) (
|
|
IN const wchar_t * pwchTarget,
|
|
IN int cchTarget,
|
|
IN const wchar_t * pwchData,
|
|
IN int cchData
|
|
);
|
|
|
|
STDMETHOD(skippedEntity) (
|
|
IN const wchar_t * pwchName,
|
|
IN int cchName
|
|
);
|
|
|
|
//
|
|
// other public functions for our handler
|
|
//
|
|
|
|
void SetOutputFile (
|
|
IN LPCWSTR pszFileName
|
|
)
|
|
{
|
|
m_bstrOutputFile = pszFileName;
|
|
}
|
|
|
|
void SetSection (
|
|
IN LPCWSTR pszSecArea,
|
|
IN LPCWSTR pszElement,
|
|
IN bool bOneAreaOnly
|
|
);
|
|
|
|
bool ParseComplete()const
|
|
{
|
|
return m_bFinished;
|
|
}
|
|
|
|
private:
|
|
|
|
bool GetAttributeValue (
|
|
IN ISAXAttributes * pAttributes,
|
|
IN LPCWSTR pszAttrName,
|
|
OUT LPWSTR * ppszAttrVal
|
|
);
|
|
|
|
bool GetAttributeValue (
|
|
IN ISAXAttributes * pAttributes,
|
|
IN int iIndex,
|
|
OUT LPWSTR * ppszAttrName,
|
|
OUT LPWSTR * ppszAttrVal
|
|
);
|
|
|
|
void WriteContent (
|
|
IN LPCWSTR pszName,
|
|
IN LPCWSTR pszValue
|
|
);
|
|
|
|
CComBSTR m_bstrOutputFile;
|
|
|
|
CComBSTR m_bstrSecArea;
|
|
|
|
CComBSTR m_bstrElement;
|
|
|
|
HANDLE m_hOutFile;
|
|
|
|
DWORD m_dwTotalElements;
|
|
|
|
bool m_bFinished;
|
|
|
|
bool m_bSingleArea;
|
|
|
|
bool m_bInSection;
|
|
|
|
bool m_bInElement;
|
|
};
|