Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/XMLDOMFile.h
T

159 lines
5.1 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
#ifndef XMLDOMFILE_ZZG_2008_12_08
2026-09-28 15:28:50 +08:00
#define XMLDOMFILE_ZZG_2008_12_08
#include <afx.h>
#include <tchar.h>
#include "XMLDOMNode.h"
#include "msxml6.tlh"
//using namespace MSXML2;
using namespace MSXML2;
//#pragma once
//#ifdef COMMON_EXPORT
//#define COMMON_EXP __declspec( dllexport )
//#else
//#define COMMON_EXP __declspec( dllimport )
//#endif
2026-10-04 00:04:20 +08:00
//节点存储的信息类
2026-09-28 15:28:50 +08:00
class TARCH_EXP CXMLNodeInfo
{
public:
CXMLNodeInfo()
{
m_strNodeName = _T("");
m_strNodeAttributeName = _T("");
m_strNodeAttributeValue = _T("");
m_strNodeValue = _T("");
m_strNodeXPath = _T("");
m_bLeafNode = FALSE;
}
CXMLNodeInfo(const CXMLNodeInfo&info)
{
m_strNodeName = info.m_strNodeName;
m_strNodeAttributeName =info.m_strNodeAttributeName;
m_strNodeAttributeValue =info.m_strNodeAttributeValue;
m_strNodeValue = info.m_strNodeValue;
m_strNodeXPath = info.m_strNodeXPath;
m_bLeafNode = info.m_bLeafNode;
}
CXMLNodeInfo&operator=(const CXMLNodeInfo&info)
{
if (this == &info)
{
return *this;
}
m_strNodeName = info.m_strNodeName;
m_strNodeAttributeName =info.m_strNodeAttributeName;
m_strNodeAttributeValue =info.m_strNodeAttributeValue;
m_strNodeValue = info.m_strNodeValue;
m_strNodeXPath = info.m_strNodeXPath;
m_bLeafNode = info.m_bLeafNode;
return *this;
}
~CXMLNodeInfo(){}
public:
2026-10-04 00:04:20 +08:00
CString m_strNodeName;//节点名字
CString m_strNodeAttributeName;//节点属性名字
CString m_strNodeAttributeValue;//节点属性值
CString m_strNodeValue;//节点值(只有当为叶子节点时有值)
CString m_strNodeXPath;//节点的路径
BOOL m_bLeafNode;//是否是叶子节点
2026-09-28 15:28:50 +08:00
};
2026-10-04 00:04:20 +08:00
//节点存储的信息类
2026-09-28 15:28:50 +08:00
typedef std::pair<CString,CString> NodeAttriBute;
typedef Array<NodeAttriBute> NodeAttriButeAry;
class TARCH_EXP CXMLNodeInfoEx
{
public:
CXMLNodeInfoEx()
{
m_strNodeName = _T("");
//m_strNodeAttributeName = _T("");
//m_strNodeAttributeValue = _T("");
m_strNodeValue = _T("");
m_strNodeXPath = _T("");
m_bLeafNode = FALSE;
}
CXMLNodeInfoEx(const CXMLNodeInfoEx&info)
{
m_strNodeName = info.m_strNodeName;
m_aryNodeAttribute = info.m_aryNodeAttribute;
//m_strNodeAttributeName =info.m_strNodeAttributeName;
//m_strNodeAttributeValue =info.m_strNodeAttributeValue;
m_strNodeValue = info.m_strNodeValue;
m_strNodeXPath = info.m_strNodeXPath;
m_bLeafNode = info.m_bLeafNode;
}
CXMLNodeInfoEx&operator=(const CXMLNodeInfoEx&info)
{
if (this == &info)
{
return *this;
}
m_strNodeName = info.m_strNodeName;
m_aryNodeAttribute = info.m_aryNodeAttribute;
//m_strNodeAttributeName =info.m_strNodeAttributeName;
//m_strNodeAttributeValue =info.m_strNodeAttributeValue;
m_strNodeValue = info.m_strNodeValue;
m_strNodeXPath = info.m_strNodeXPath;
m_bLeafNode = info.m_bLeafNode;
return *this;
}
~CXMLNodeInfoEx(){}
public:
2026-10-04 00:04:20 +08:00
CString m_strNodeName;//节点名字
2026-09-28 15:28:50 +08:00
NodeAttriButeAry m_aryNodeAttribute;
2026-10-04 00:04:20 +08:00
//CString m_strNodeAttributeName;//节点属性名字
//CString m_strNodeAttributeValue;//节点属性值
CString m_strNodeValue;//节点值(只有当为叶子节点时有值)
CString m_strNodeXPath;//节点的路径
BOOL m_bLeafNode;//是否是叶子节点
2026-09-28 15:28:50 +08:00
};
class TARCH_EXP CXMLDOMFile
{
public:
CXMLDOMFile();
virtual ~CXMLDOMFile();
2026-10-04 00:04:20 +08:00
//文件是否存在
2026-09-28 15:28:50 +08:00
static bool IsFileExist( const TCHAR* strFileName );
2026-10-04 00:04:20 +08:00
//创建新的xml文档
2026-09-28 15:28:50 +08:00
static bool CreateNewXMLDoc(const TCHAR* strFileName,const TCHAR* strProcessingInstruction
,const TCHAR*strRootNodeName,const NodeAttriButeAry&nodeInfoAry);
2026-10-04 00:04:20 +08:00
//打开文件
2026-09-28 15:28:50 +08:00
static bool Open( const TCHAR* FileName );
2026-10-04 00:04:20 +08:00
//保存文件
2026-09-28 15:28:50 +08:00
static bool Save( const TCHAR* strSaveAsFileName = NULL );
2026-10-04 00:04:20 +08:00
//得到根节点指针
2026-09-28 15:28:50 +08:00
CXMLDOMNodePtr GetRoot( void );
2026-10-04 00:04:20 +08:00
//得到文件名
2026-09-28 15:28:50 +08:00
static TCHAR* GetXMLFileName();
2026-10-04 00:04:20 +08:00
//得到指定属性值的节点指针(此函数有漏洞 请根据info中存储的路径查找)
2026-09-28 15:28:50 +08:00
CXMLDOMNodePtr GetAssignNode(const TCHAR*szNodeName,const TCHAR*szNodeAttribute);
2026-10-04 00:04:20 +08:00
//得到指定节点名字的所有节点
2026-09-28 15:28:50 +08:00
CXMLDOMNodesPtr GetNodesByTagName(const TCHAR*szNodeName);
2026-10-04 00:04:20 +08:00
//选择单个节点
2026-09-28 15:28:50 +08:00
CXMLDOMNodePtr SelectSingleNode( const TCHAR* szNodeXPath );
2026-10-04 00:04:20 +08:00
//选择多个节点(/../../*)声明XPath:注意"/RootNode/Node2"是选择Node2节点,"/RootNode/Node2/*"是选择Node2下的所有子结点
2026-09-28 15:28:50 +08:00
CXMLDOMNodesPtr SelectNodes( const TCHAR* szNodeXPath );
// Select path for Single node by attribute name and value:
CXMLDOMNodePtr SelectNodeByAttribute( const TCHAR* szNodeXPath, const TCHAR* szAttributeName , const TCHAR* szAttributeValue );
2026-10-04 00:04:20 +08:00
//得到当前节点的查找路径xPath
2026-09-28 15:28:50 +08:00
void GetCurNodeXPath(const CXMLDOMNodePtr &pXMLDOMNodePtr,CString &strXPath);
2026-10-04 00:04:20 +08:00
//得到第一个属性名字构成的path
2026-09-28 15:28:50 +08:00
void GetNoteAttriPath(const CXMLDOMNodePtr &pXMLDOMNodePtr,const CString &strAttriName,CString &strXPath);
2026-10-04 00:04:20 +08:00
//是否是根节点
2026-09-28 15:28:50 +08:00
bool IsRootNode(const CXMLDOMNodePtr &pXMLDOMNodePtr);
2026-10-04 00:04:20 +08:00
//得到版本号
2026-09-28 15:28:50 +08:00
CString GetVersion();
2026-10-04 00:04:20 +08:00
//得到字符版本;
2026-09-28 15:28:50 +08:00
CString GetCodeVersion();
2026-10-04 00:04:20 +08:00
//得到当前指针
2026-09-28 15:28:50 +08:00
MSXML2::IXMLDOMDocument2Ptr GetPtr(){return m_pXMLDOMDocument;}
static MSXML2::IXMLDOMDocument2Ptr m_pXMLDOMDocument; // The pointer to XML Dom Document.
protected:
static TCHAR* m_strFileName; // Save opened file name .
};
#endif