summaryrefslogtreecommitdiffstats
path: root/storage/connect/domdoc.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/connect/domdoc.h')
-rw-r--r--storage/connect/domdoc.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/storage/connect/domdoc.h b/storage/connect/domdoc.h
new file mode 100644
index 00000000..dd893609
--- /dev/null
+++ b/storage/connect/domdoc.h
@@ -0,0 +1,146 @@
+/******************************************************************/
+/* Declaration of XML document processing using MS DOM */
+/* Author: Olivier Bertrand 2007 - 2012 */
+/******************************************************************/
+#include "plgxml.h"
+
+typedef class DOMDOC *PDOMDOC;
+typedef class DOMNODE *PDOMNODE;
+typedef class DOMATTR *PDOMATTR;
+typedef class DOMNODELIST *PDOMLIST;
+
+/******************************************************************/
+/* XML block. Must have the same layout than FBLOCK up to Type. */
+/******************************************************************/
+typedef struct _xblock { /* Loaded XML file block */
+ struct _xblock *Next;
+ LPCSTR Fname; /* Point on file name */
+ size_t Length; /* Used to tell if read mode */
+ short Count; /* Nb of times file is used */
+ short Type; /* TYPE_FB_XML */
+ int Retcode; /* Return code from Load */
+ MSXML2::IXMLDOMDocumentPtr Docp;/* Document interface pointer */
+ } XBLOCK, *PXBLOCK;
+
+/******************************************************************/
+/* Declaration of DOM document. */
+/******************************************************************/
+class DOMDOC : public XMLDOCUMENT {
+ friend class DOMNODE;
+ public:
+ // Constructor
+ DOMDOC(char *nsl, char *nsdf, char *enc, PFBLOCK fp);
+
+ // Properties
+ virtual short GetDocType(void) {return TYPE_FB_XML;}
+ virtual void *GetDocPtr(void) {return Docp;}
+ virtual void SetNofree(bool b) {} // Only libxml2
+
+ // Methods
+ virtual bool Initialize(PGLOBAL g, PCSZ entry, bool zipped);
+ virtual bool ParseFile(PGLOBAL g, char *fn);
+ virtual bool NewDoc(PGLOBAL g, PCSZ ver);
+ virtual void AddComment(PGLOBAL g, char *com);
+ virtual PXNODE GetRoot(PGLOBAL g);
+ virtual PXNODE NewRoot(PGLOBAL g, char *name);
+ virtual PXNODE NewPnode(PGLOBAL g, char *name);
+ virtual PXATTR NewPattr(PGLOBAL g);
+ virtual PXLIST NewPlist(PGLOBAL g);
+ virtual int DumpDoc(PGLOBAL g, char *ofn);
+ virtual void CloseDoc(PGLOBAL g, PFBLOCK xp);
+ virtual PFBLOCK LinkXblock(PGLOBAL g, MODE m, int rc, char *fn);
+
+ protected:
+ // Members
+ MSXML2::IXMLDOMDocumentPtr Docp;
+ MSXML2::IXMLDOMNodeListPtr Nlist;
+ HRESULT Hr;
+}; // end of class DOMDOC
+
+/******************************************************************/
+/* Declaration of DOM XML node. */
+/******************************************************************/
+class DOMNODE : public XMLNODE {
+ friend class DOMDOC;
+ friend class DOMNODELIST;
+ public:
+ // Properties
+ virtual char *GetName(PGLOBAL g);
+ virtual int GetType(void) {return Nodep->nodeType;}
+ virtual PXNODE GetNext(PGLOBAL g);
+ virtual PXNODE GetChild(PGLOBAL g);
+
+ // Methods
+ virtual RCODE GetContent(PGLOBAL g, char *buf, int len);
+ virtual bool SetContent(PGLOBAL g, char *txtp, int len);
+ virtual PXNODE Clone(PGLOBAL g, PXNODE np);
+ virtual PXLIST GetChildElements(PGLOBAL g, char *xp, PXLIST lp);
+ virtual PXLIST SelectNodes(PGLOBAL g, char *xp, PXLIST lp);
+ virtual PXNODE SelectSingleNode(PGLOBAL g, char *xp, PXNODE np);
+ virtual PXATTR GetAttribute(PGLOBAL g, char *name, PXATTR ap);
+ virtual PXNODE AddChildNode(PGLOBAL g, PCSZ name, PXNODE np);
+ virtual PXATTR AddProperty(PGLOBAL g, char *name, PXATTR ap);
+ virtual void AddText(PGLOBAL g, PCSZ txtp);
+ virtual void DeleteChild(PGLOBAL g, PXNODE dnp);
+
+ protected:
+ // Constructor
+ DOMNODE(PXDOC dp, MSXML2::IXMLDOMNodePtr np);
+
+ // Members
+ MSXML2::IXMLDOMDocumentPtr Docp;
+ MSXML2::IXMLDOMNodePtr Nodep;
+ char Name[64];
+ WCHAR *Ws;
+ int Len;
+ bool Zip;
+}; // end of class DOMNODE
+
+/******************************************************************/
+/* Declaration of DOM XML node list. */
+/******************************************************************/
+class DOMNODELIST : public XMLNODELIST {
+ friend class DOMDOC;
+ friend class DOMNODE;
+ public:
+ // Methods
+ virtual int GetLength(void) {return Listp->length;}
+ virtual PXNODE GetItem(PGLOBAL g, int n, PXNODE np);
+ virtual bool DropItem(PGLOBAL g, int n);
+
+ protected:
+ // Constructor
+ DOMNODELIST(PXDOC dp, MSXML2::IXMLDOMNodeListPtr lp);
+
+ // Members
+ MSXML2::IXMLDOMNodeListPtr Listp;
+}; // end of class DOMNODELIST
+
+/******************************************************************/
+/* Declaration of DOM XML attribute. */
+/******************************************************************/
+class DOMATTR : public XMLATTRIBUTE {
+ friend class DOMDOC;
+ friend class DOMNODE;
+ public:
+ // Properties
+ virtual char *GetName(PGLOBAL g);
+ virtual PXATTR GetNext(PGLOBAL);
+
+ // Methods
+ virtual RCODE GetText(PGLOBAL g, char *bufp, int len);
+ virtual bool SetText(PGLOBAL g, char *txtp, int len);
+
+ protected:
+ // Constructor
+ DOMATTR(PXDOC dp, MSXML2::IXMLDOMAttributePtr ap,
+ MSXML2::IXMLDOMNamedNodeMapPtr nmp = NULL);
+
+ // Members
+ MSXML2::IXMLDOMAttributePtr Atrp;
+ MSXML2::IXMLDOMNamedNodeMapPtr Nmp;
+ char Name[64];
+ WCHAR *Ws;
+ int Len;
+ long K;
+}; // end of class DOMATTR