Source code of Windows XP (NT5)
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.
|
|
/********************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name: pfxml.h
Abstract: A simple XML parser & object model (for read only access to an XML file. This is heavily (nearly stolen) based on WSmith's SimpleXML stuff that he wrote for the Neptune comments button
Revision History: DerekM created 03/15/00
********************************************************************/
#ifndef PFXML_H
#define PFXML_H
#include "util.h"
#include "pfarray.h"
#include "pfhash.h"
class CPFXMLParser; class CPFXMLNode;
/////////////////////////////////////////////////////////////////////////////
// enumerations
enum EPFXMLNodeType { xmlntUnknown = 0, xmlntElement, xmlntText, };
/////////////////////////////////////////////////////////////////////////////
// CPFXMLDocument
class CPFXMLDocument : public CPFPrivHeapGenericClassBase { private: // member data
CPFXMLNode *m_ppfxmlRoot;
public: CPFXMLDocument(void); ~CPFXMLDocument(void);
HRESULT get_RootNode(CPFXMLNode **pppfxmlRoot); HRESULT put_RootNode(CPFXMLNode *ppfxmlRoot);
HRESULT ParseFile(LPWSTR wszFile); HRESULT ParseBlob(BYTE *pbBlob, DWORD cbBlob); HRESULT ParseStream(IStream *pStm, DWORD cbStm); HRESULT WriteFile(LPWSTR wszFile); };
/////////////////////////////////////////////////////////////////////////////
// CPFArrayAttr definition
class CPFArrayAttr : public CPFArrayBase { private: void DeleteItem(LPVOID pv); LPVOID AllocItemCopy(LPVOID pv);
public: HRESULT CopyFrom(CPFArrayAttr *prg) { return internalCopyFrom(prg); } };
/////////////////////////////////////////////////////////////////////////////
// CPFXMLDocument
class CPFXMLNode : private CPFPrivHeapGenericClassBase, public IUnknown { friend class CPFXMLDocument;
private: // memberdata
CPFArrayUnknown m_rgChildren; EPFXMLNodeType m_xmlnt; CPFArrayAttr m_rgAttr; CComBSTR m_bstrTagData; DWORD m_cRef;
// member functions
CPFXMLNode(DWORD cRef); ~CPFXMLNode(void);
HRESULT Write(HANDLE hFile); void Cleanup(void);
public: static CPFXMLNode *CreateInstance(void); STDMETHOD(QueryInterface)(REFIID riid, LPVOID *ppv) { return E_NOTIMPL; } STDMETHOD_(ULONG, AddRef)(void); STDMETHOD_(ULONG, Release)(void);
EPFXMLNodeType get_NodeType(void) { return m_xmlnt; } void put_NodeType(EPFXMLNodeType xmlnt) { m_xmlnt = xmlnt; } HRESULT get_Data(BSTR *pbstrData); HRESULT put_Data(LPCWSTR wszData, DWORD cch = (DWORD)-1); HRESULT append_Data(LPCWSTR wszData, DWORD cch = (DWORD)-1);
DWORD get_AttributeCount(void) { return m_rgAttr.get_Highest() + 1; } HRESULT add_Attribute(LPCWSTR wszName, LPCWSTR wszVal, DWORD cchName = (DWORD)-1, DWORD cchVal = (DWORD)-1); HRESULT get_Attribute(LPCWSTR wszName, BSTR *pbstrVal); HRESULT get_Attribute(DWORD iAttr, BSTR *pbstrVal);
DWORD get_ChildCount(void) { return m_rgChildren.get_Highest() + 1; } HRESULT DeleteAllChildren(void); HRESULT append_Child(CPFXMLNode *ppfxml); HRESULT append_Children(CPFArrayUnknown &rgNodes); HRESULT get_Child(DWORD iChild, CPFXMLNode **pppfxml); HRESULT get_MatchingChildElements(LPCWSTR wszTag, CPFArrayUnknown &rgNodes); HRESULT get_ChildText(BSTR *pbstrText);
HRESULT CloneNode(CPFXMLNode **pppfxml, BOOL fWantChildren = TRUE); };
#endif
|