From 03ef0b51103c735077c784c7df81ae2bcc1599ab Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期四, 13 二月 2025 18:33:56 +0800
Subject: [PATCH] update

---
 jrj/xframe/kobject/kxml.hpp |  459 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 441 insertions(+), 18 deletions(-)

diff --git a/jrj/xframe/kobject/kxml.hpp b/jrj/xframe/kobject/kxml.hpp
index 966d8ad..a41b9fc 100644
--- a/jrj/xframe/kobject/kxml.hpp
+++ b/jrj/xframe/kobject/kxml.hpp
@@ -1,6 +1,8 @@
 #pragma once
 
 typedef wchar_t* BSTR ;
+
+#if 1
 namespace Hxsoft {	namespace XFrame
 {
 	class KXMLDOMNode;
@@ -13,7 +15,9 @@
 	class KXMLDOMTextNode;
 	class KXMLDOMProcessingInstruction;
 	class KXMLDOMNodeList;
-	class KXMLParseError;
+	class KXMLDOMParseError;
+	class KXMLDOMParseError;
+	class KXMLDOMSchemaCollection;
 
 	enum  KDOMNodeType
 	{
@@ -133,13 +137,43 @@
 		KXMLDOMNode(const KXMLDOMNode& rhs);
 		const KXMLDOMNode& operator =(const KXMLDOMNode& rhs);
 	public:
+		unsigned long AddRef();
+		unsigned long Release();
+	public:
+		LPARAM ptr()
+		{
+			this->AddRef();
+			return (LPARAM)this->getImpl();
+		}
+		KXMLDOMNode(LPARAM p) :KXMLDOMNode((void*)p) {
+			AddRef();
+		}
+	public:
 		operator bool() { return impl ? true : false; }
+		bool operator !=(KXMLDOMNode& rhs) { return rhs.getImpl() != getImpl(); }
+		bool operator ==(KXMLDOMNode& rhs) { return rhs.getImpl() == getImpl(); }
 	public:
 		void* getImpl();
 	};
 
+
+	class KXMLDOMElement : public KXMLDOMNode
+	{
+	public:
+		KXMLDOMElement(KXMLDOMNode v);
+		KXMLDOMElement(void* impl) :KXMLDOMNode(impl) {}
+		KXMLDOMElement() :KXMLDOMNode() {}
+	public:
+		KXMLDOMElement(LPARAM p) :KXMLDOMNode(p) {}
+	};
+
 	class KXMLDOMDocument : public KXMLDOMNode
 	{
+	public:
+		bool operator !()
+		{
+			return !impl || !documentElement();
+		}
 	public:
 		const wchar_t* text();
 		const wchar_t* url();
@@ -182,7 +216,14 @@
 
 		wchar_t* transformNode(KXMLDOMNode);
 		KXMLDOMNode transformNodeToObject(KXMLDOMNode);
-		KXMLParseError validate();
+	public:
+		KXMLDOMParseError parseError();
+
+	public:
+		KXMLDOMSchemaCollection namespaces();
+		KXMLDOMSchemaCollection schemas();
+		bool setSchemas(KXMLDOMSchemaCollection collection);
+		KXMLDOMParseError validate();
 		//bool validateNode();
 	public:
 		KXMLDOMDocument(void* impl);
@@ -191,15 +232,19 @@
 	public:
 		const KXMLDOMDocument& operator =(const KXMLDOMDocument& rhs);
 		KXMLDOMDocument(const KXMLDOMDocument& rhs);
+	public:
+		void Reset()
+		{
+			if (documentElement())removeChild(documentElement());
+		}
+	public:
+		static bool ValidSchema(const wchar_t* pSchema, BSTR& errText);
+		static bool ValidSchema(KXMLDOMDocument xml, KXMLDOMDocument schema, BSTR& errText);
+	public:
+		static int GetSchemaXml(LPTSTR pSchema, KXMLDOMDocument& x);
+
 	};
 
-	class KXMLDOMElement : public KXMLDOMNode
-	{
-	public:
-		KXMLDOMElement( KXMLDOMNode v);
-		KXMLDOMElement(void* impl) :KXMLDOMNode(impl) {}
-		KXMLDOMElement() :KXMLDOMNode() {}
-	};
 	class KXMLDOMAttribute : public KXMLDOMNode
 	{
 	public:
@@ -247,32 +292,410 @@
 		KXMLDOMDocumentFragment(void* impl) :KXMLDOMNode(impl) {}
 	};
 
-	class KXMLParseError : public KXMLDOMNode
+	class  KXMLDOMParseError : public KXMLDOMNode
 	{
 	public:
-		KXMLParseError(KXMLDOMNode& v);
-		KXMLParseError(void* impl) :KXMLDOMNode(impl) {}
+		KXMLDOMParseError(KXMLDOMNode& v);
+		KXMLDOMParseError(void* impl) :KXMLDOMNode(impl) {}
+	public:
+		int errorCode();
+		int filepos();
+		int line();
+		int linepos();
+		BSTR reason();
+		BSTR srcText();
+		BSTR url();
 	};
+
+	class  KXMLDOMSchemaCollection
+	{
+	public:
+	protected:
+		void* impl;
+	public:
+		KXMLDOMSchemaCollection(void* impl);
+		KXMLDOMSchemaCollection();
+		KXMLDOMSchemaCollection(LPARAM p);
+		~KXMLDOMSchemaCollection();
+	public:
+		KXMLDOMSchemaCollection(const KXMLDOMSchemaCollection& rhs);
+		const KXMLDOMSchemaCollection& operator =(const KXMLDOMSchemaCollection& rhs);
+	public:
+		void* getImpl();
+	};
+
 }}
 
+
+
+using KXMLDOMDocument=Hxsoft::XFrame::KXMLDOMDocument;
+using KXMLDOMNode=Hxsoft::XFrame::KXMLDOMNode;
+using KXMLDOMElement=Hxsoft::XFrame::KXMLDOMElement;
+using KXMLDOMNodeList = Hxsoft::XFrame::KXMLDOMNodeList;
+using KXMLDOMParseError = Hxsoft::XFrame::KXMLDOMParseError;
+using KXMLDOMSchemaCollection = Hxsoft::XFrame::KXMLDOMSchemaCollection;
+
+/*
+class KXMLDOMParseError : public KXMLDOMNode
+{
+public:
+	KXMLDOMParseError(KXMLDOMNode& v);
+	KXMLDOMParseError(void* impl) :KXMLDOMNode(impl) {}
+public:
+	int errorCode();
+	int filepos();
+	int line();
+	int linepos();
+	BSTR reason();
+	BSTR srcText();
+	BSTR url();
+};
+*/
 class KXMLDOMElementPtr
 {
 private:
 	KXMLDOMElement* m_pElement;
 public:
-	KXMLDOMElementPtr(LPARAM ele) :m_pElement((KXMLDOMElement* )ele) {}
-	KXMLDOMElementPtr(KXMLDOMElement* pEle) :m_pElement((KXMLDOMElement*)pEle) {}
+	KXMLDOMElementPtr(LPARAM ele) :m_pElement((KXMLDOMElement*)ele) {}
+	KXMLDOMElementPtr(KXMLDOMElement* pEle) :m_pElement(pEle) {}
 	KXMLDOMElementPtr(KXMLDOMElement ele) :m_pElement(new KXMLDOMElement(ele)) {}
 public:
 	KXMLDOMElement* value() { return m_pElement; }
 public:
 	operator KXMLDOMElement* () { return m_pElement; }
 	operator KXMLDOMElement& () { return *m_pElement; }
-	KXMLDOMElement*  operator -> () { return m_pElement; }
+	KXMLDOMElement* operator -> () { return m_pElement; }
 };
 
-using KXMLDOMDocument=Hxsoft::XFrame::KXMLDOMDocument;
-using KXMLDOMNode=Hxsoft::XFrame::KXMLDOMNode;
-using KXMLDOMElement=Hxsoft::XFrame::KXMLDOMElement;
+#endif
+
+#if 0
+namespace Hxsoft {
+	namespace XFrame
+	{
+		class KXMLDOMNode;
+		class KXMLDOMAttribute;
+		class KXMLDOMElement;
+		class KXMLDOMCDATASection;
+		class KXMLDOMDocumentFragment;
+		class KXMLDOMComment;
+		class KXMLDOMEntityReference;
+		class KXMLDOMTextNode;
+		class KXMLDOMProcessingInstruction;
+		class KXMLDOMNodeList;
+		class KXMLDOMParseError;
+		class KXMLDOMSchemaCollection;
+
+		enum  KDOMNodeType
+		{
+			KNODE_INVALID = 0,
+			KNODE_ELEMENT = (KNODE_INVALID + 1),
+			KNODE_ATTRIBUTE = (KNODE_ELEMENT + 1),
+			KNODE_TEXT = (KNODE_ATTRIBUTE + 1),
+			KNODE_CDATA_SECTION = (KNODE_TEXT + 1),
+			KNODE_ENTITY_REFERENCE = (KNODE_CDATA_SECTION + 1),
+			KNODE_ENTITY = (KNODE_ENTITY_REFERENCE + 1),
+			KNODE_PROCESSING_INSTRUCTION = (KNODE_ENTITY + 1),
+			KNODE_COMMENT = (KNODE_PROCESSING_INSTRUCTION + 1),
+			KNODE_DOCUMENT = (KNODE_COMMENT + 1),
+			KNODE_DOCUMENT_TYPE = (KNODE_DOCUMENT + 1),
+			KNODE_DOCUMENT_FRAGMENT = (KNODE_DOCUMENT_TYPE + 1),
+			KNODE_NOTATION = (KNODE_DOCUMENT_FRAGMENT + 1)
+		};
+
+		class  KXMLDOMNodeList
+		{
+		public:
+			long length();
+			bool length(long&);
+			bool length(long*);
+			bool get_length(long* v) { return length(v); }
+			KXMLDOMNode item(int index);
+			bool item(int index, KXMLDOMNode& node);
+			bool item(int index, KXMLDOMNode* node);
+			bool get_item(int index, KXMLDOMNode* node) { return item(index, node); }
+		private:
+			void* impl;
+		public:
+			void* getImpl();
+		public:
+			KXMLDOMNodeList(void* impl);
+			KXMLDOMNodeList() :impl(nullptr) {}
+			~KXMLDOMNodeList();
+		public:
+			operator bool() { return impl ? true : false; }
+		public:
+			KXMLDOMNodeList(const KXMLDOMNodeList& rhs);
+			const KXMLDOMNodeList& operator =(const KXMLDOMNodeList& rhs);
+		};
+
+		class KXMLDOMElement;
+		class KXMLDOMAttribute;
+		class KXMLDOMDocument;
+		class  KXMLDOMNode {
+		public:
+			//	attributes
+			//		baseName
+			KXMLDOMNodeList childNodes();
+			//	dataType
+			//	definition
+			KXMLDOMNode	firstChild();
+			KXMLDOMNode	lastChild();
+			//	namespaceURI
+			//	namespaceURI
+			KXMLDOMNode	nextSibling();
+			const wchar_t* nodeName();
+			KDOMNodeType	nodeType();
+			KDOMNodeType	get_nodeType() { return nodeType(); }
+			//	nodeTypedValue
+			//	nodeTypeString
+			//	nodeValue
+			KXMLDOMDocument	ownerDocument();
+			KXMLDOMNode	parentNode();
+			//	parsed
+			//	prefix
+			KXMLDOMNode	previousSibling();
+			//	specified
+			const wchar_t* tagName();
+			const wchar_t* text();
+			const wchar_t* xml();
+
+			bool get_tagName(BSTR& str);
+			bool get_text(BSTR& str);
+			bool get_xml(BSTR& str);
+			bool get_tagName(BSTR* str) { return get_tagName(*str); }
+			bool get_text(BSTR* str) { return get_text(*str); }
+			bool get_xml(BSTR* str) { return get_xml(*str); }
+			bool settext(const wchar_t* txt);
+			bool put_text(const wchar_t* txt) { return settext(txt); }
+
+
+			bool	appendChild(KXMLDOMNode);
+			KXMLDOMNode	cloneNode(bool);
+			wchar_t* getAttribute(const wchar_t* name);
+			void getAttribute(const wchar_t* name, void* vt);
+			KXMLDOMAttribute	getAttributeNode(const wchar_t* name);
+			KXMLDOMNodeList	getElementsByTagName(const wchar_t* name);
+			bool	hasChildNodes();
+			bool	insertBefore(KXMLDOMNode newnode, KXMLDOMNode at);
+			void	normalize();
+			bool	removeAttribute(const wchar_t* name);
+			bool	removeAttributeNode(KXMLDOMNode attr);
+			bool	removeChild(KXMLDOMNode val);
+			bool	replaceChild(KXMLDOMNode newChild, KXMLDOMNode oldChild);
+			KXMLDOMNodeList	selectNodes(const wchar_t*);
+			KXMLDOMNode	selectSingleNode(const wchar_t*);
+			bool selectNodes(const wchar_t*, KXMLDOMNodeList& pNodeList);
+			bool selectSingleNode(const wchar_t*, KXMLDOMNode& pNode);
+			bool selectNodes(const wchar_t*, KXMLDOMNodeList* pNodeList);
+			bool selectSingleNode(const wchar_t*, KXMLDOMNode* pNode);
+			void	setAttribute(const wchar_t* name, const wchar_t* value);
+			void	setAttribute(const wchar_t* name, long val);
+			void	setAttribute(const wchar_t* name, int val);
+			void	setAttribute(const wchar_t* name, double val);
+			wchar_t* transformNode(KXMLDOMNode stylesheet);
+			KXMLDOMNode	transformNodeToObject(KXMLDOMNode);
+		protected:
+			void* impl;
+		public:
+			KXMLDOMNode(void* impl);
+			KXMLDOMNode() :KXMLDOMNode(nullptr) {}
+			~KXMLDOMNode();
+			KXMLDOMNode(LPARAM p) :KXMLDOMNode((void*)p) {
+				AddRef();
+			}
+		public:
+			KXMLDOMNode(const KXMLDOMNode& rhs);
+			const KXMLDOMNode& operator =(const KXMLDOMNode& rhs);
+		public:
+			operator bool() { return impl ? true : false; }
+		public:
+			void* getImpl();
+		public:
+			unsigned long AddRef();
+			unsigned long Release();
+		public:
+			bool operator !=(KXMLDOMNode& rhs) { return rhs.getImpl() != getImpl(); }
+			bool operator ==(KXMLDOMNode& rhs) { return rhs.getImpl() == getImpl(); }
+		};
+
+		class  KXMLDOMElement : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMElement(KXMLDOMNode v);
+			KXMLDOMElement(void* impl) :KXMLDOMNode(impl) {}
+			KXMLDOMElement() :KXMLDOMNode() {}
+		public:
+			KXMLDOMElement(LPARAM p) :KXMLDOMNode(p) {}
+
+		};
+		class  KXMLDOMAttribute : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMAttribute(KXMLDOMNode& v);
+			KXMLDOMAttribute(void* impl) :KXMLDOMNode(impl) {}
+		};
+		class  KXMLDOMCDATASection : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMCDATASection(KXMLDOMNode& v);
+			KXMLDOMCDATASection(void* impl) :KXMLDOMNode(impl) {}
+		};
+
+
+		class  KXMLDOMDocument : public KXMLDOMNode
+		{
+		public:
+			bool operator !()
+			{
+				return !impl || !documentElement();
+			}
+		public:
+			const wchar_t* text();
+			const wchar_t* url();
+			const wchar_t* xml();
+			KXMLDOMElement documentElement();
+			bool documentElement(KXMLDOMElement* pDoc);
+			bool get_documentElement(KXMLDOMElement* pDoc) { return documentElement(pDoc); }
+		public:
+			KXMLDOMParseError parseError();
+		public:
+			bool appendChild(KXMLDOMNode);
+			KXMLDOMAttribute createAttribute(const wchar_t*);
+			KXMLDOMCDATASection createCDATASection(const wchar_t*);
+			KXMLDOMComment createComment(const wchar_t*);
+			KXMLDOMDocumentFragment createDocumentFragment();
+			KXMLDOMElement createElement(const wchar_t*);
+			bool createElement(const wchar_t*, KXMLDOMElement* ele);
+			KXMLDOMEntityReference createEntityReference(const wchar_t*);
+			KXMLDOMNode createNode(KDOMNodeType ty, const wchar_t* name, const wchar_t* ns);
+			KXMLDOMProcessingInstruction createProcessingInstruction(const wchar_t* target, const wchar_t* data);
+			KXMLDOMTextNode createTextNode(const wchar_t*);
+
+			KXMLDOMNodeList getElementsByTagName(const wchar_t*);
+			wchar_t* getProperty(const wchar_t*);
+			bool setProperty(const wchar_t* prop, const wchar_t* val);
+			bool setProperty(const wchar_t* prop, bool val);
+			bool hasChildNodes();
+			bool importNode(KXMLDOMNode);
+			bool insertBefore(KXMLDOMNode newnode, KXMLDOMNode at);
+			bool load(const wchar_t*);
+			bool loadXML(const wchar_t*);
+			KXMLDOMNode nodeFromID(const wchar_t*);
+			bool removeChild(KXMLDOMNode);
+			bool replaceChild(KXMLDOMNode newChild, KXMLDOMNode oldChild);
+			bool save(const wchar_t*);
+			KXMLDOMNodeList selectNodes(const wchar_t*);
+			KXMLDOMNode selectSingleNode(const wchar_t*);
+			bool selectNodes(const wchar_t*, KXMLDOMNodeList& pNodeList);
+			bool selectSingleNode(const wchar_t*, KXMLDOMNode& pNode);
+			bool selectNodes(const wchar_t*, KXMLDOMNodeList* pNodeList);
+			bool selectSingleNode(const wchar_t*, KXMLDOMNode* pNode);
+
+			wchar_t* transformNode(KXMLDOMNode);
+			KXMLDOMNode transformNodeToObject(KXMLDOMNode);
+
+		public:
+			KXMLDOMSchemaCollection namespaces();
+			KXMLDOMSchemaCollection schemas();
+			bool setSchemas(KXMLDOMSchemaCollection collection);
+			KXMLDOMParseError validate();
+			//bool validateNode();
+		public:
+			KXMLDOMDocument(void* impl);
+			KXMLDOMDocument();
+			~KXMLDOMDocument();
+		public:
+			const KXMLDOMDocument& operator =(const KXMLDOMDocument& rhs);
+			KXMLDOMDocument(const KXMLDOMDocument& rhs);
+		public:
+			void Reset()
+			{
+				if (documentElement())removeChild(documentElement());
+			}
+		public:
+			static bool ValidSchema(const wchar_t* pSchema, BSTR& errText);
+			static bool ValidSchema(KXMLDOMDocument xml, KXMLDOMDocument schema, BSTR& errText);
+		public:
+			static int GetSchemaXml(LPTSTR pSchema, KXMLDOMDocument& x);
+		};
+
+
+		class  KXMLDOMComment : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMComment(KXMLDOMNode& v);
+			KXMLDOMComment(void* impl) :KXMLDOMNode(impl) {}
+		};
+
+		class  KXMLDOMEntityReference : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMEntityReference(KXMLDOMNode& v);
+			KXMLDOMEntityReference(void* impl) :KXMLDOMNode(impl) {}
+		};
+
+		class  KXMLDOMTextNode : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMTextNode(KXMLDOMNode& v);
+			KXMLDOMTextNode(void* impl) :KXMLDOMNode(impl) {}
+		};
+
+		class  KXMLDOMProcessingInstruction : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMProcessingInstruction(KXMLDOMNode& v);
+			KXMLDOMProcessingInstruction(void* impl) :KXMLDOMNode(impl) {}
+		};
+		class  KXMLDOMDocumentFragment : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMDocumentFragment(KXMLDOMNode& v);
+			KXMLDOMDocumentFragment(void* impl) :KXMLDOMNode(impl) {}
+		};
+
+		class  KXMLDOMParseError : public KXMLDOMNode
+		{
+		public:
+			KXMLDOMParseError(KXMLDOMNode& v);
+			KXMLDOMParseError(void* impl) :KXMLDOMNode(impl) {}
+		public:
+			int errorCode();
+			int filepos();
+			int line();
+			int linepos();
+			BSTR reason();
+			BSTR srcText();
+			BSTR url();
+		};
+
+		class  KXMLDOMSchemaCollection
+		{
+		public:
+		protected:
+			void* impl;
+		public:
+			KXMLDOMSchemaCollection(void* impl);
+			KXMLDOMSchemaCollection();
+			KXMLDOMSchemaCollection(LPARAM p);
+			~KXMLDOMSchemaCollection();
+		public:
+			KXMLDOMSchemaCollection(const KXMLDOMSchemaCollection& rhs);
+			const KXMLDOMSchemaCollection& operator =(const KXMLDOMSchemaCollection& rhs);
+		public:
+			void* getImpl();
+		};
+
+	}
+}
+
+using KXMLDOMDocument = Hxsoft::XFrame::KXMLDOMDocument;
+using KXMLDOMNode = Hxsoft::XFrame::KXMLDOMNode;
+using KXMLDOMElement = Hxsoft::XFrame::KXMLDOMElement;
 using KXMLDOMNodeList = Hxsoft::XFrame::KXMLDOMNodeList;
+using KXMLDOMParseError = Hxsoft::XFrame::KXMLDOMParseError;
+using KXMLDOMSchemaCollection = Hxsoft::XFrame::KXMLDOMSchemaCollection;
+
+#endif
 

--
Gitblit v1.9.3