первый

This commit is contained in:
2024-11-01 12:23:13 +05:00
parent 801d9d33fa
commit 0688c46a7e
226 changed files with 162921 additions and 0 deletions

132
lib/xmlTools.cpp Normal file
View File

@ -0,0 +1,132 @@
//------------------------------------------------------------------------------
#include "xmltools.h"
#include "wxTools.h"
#include "tcDebug.h"
//------------------------------------------------------------------------------
wxXmlNode* findNode(wxXmlNode* node,wxString nodename)
{
if(node==NULL) return NULL;
wxXmlNode* iNode;
iNode=node->GetChildren();
while (iNode != NULL)
{
wxString name=iNode->GetName();
if(name==nodename) return iNode;
iNode=iNode->GetNext();
}
return NULL;
}
//------------------------------------------------------------------------------
wxXmlNode* findNodeOnAttribute(wxXmlNode* node,wxString nodename,wxString Attribute,wxString val)
{
/*wxXmlNode* iNode;
iNode=node->GetChildren();
while (iNode != NULL)
{
if((iNode->GetName()==nodename)&&(iNode->GetPropVal(Attribute,_T(""))==val)) return iNode;
iNode=iNode->GetNext();
}*/
return NULL;
}
//------------------------------------------------------------------------------
wxXmlNode* findFirstNode(wxXmlNode* node,wxString nodename)
{
wxXmlNode* mas[10]; //макс уровень вложенности
int pos=0;
mas[pos] = node->GetChildren();
while (mas[pos] != NULL)
{
if(mas[pos]->GetName()==nodename) return mas[pos];
if(mas[pos]->GetChildren()!=NULL)
{
pos++;
mas[pos]=mas[pos-1]->GetChildren();
} else
{
//если не идёт дальше пытаемся подняться в верх по дереву
while (true)
{
mas[pos] = mas[pos]->GetNext();
if(mas[pos]==NULL)
{
if(pos>0) pos--; else break;
} else
{
break;
}
}
}
}
return NULL;
}
//------------------------------------------------------------------------------
//Найти первый узел с заданным атрибутом без рекурсии
wxXmlNode* findFirstNodeOnAttribute(wxXmlNode* node,wxString nodename,wxString Attribute,wxString val)
{
/*
wxXmlNode* mas[10]; //макс уровень вложенности
int pos=0;
mas[pos] = node->GetChildren();
while (mas[pos] != NULL)
{
if((mas[pos]->GetName()==nodename)&&(mas[pos]->GetPropVal(Attribute,_T(""))==val)) return mas[pos];
if(mas[pos]->GetChildren()!=NULL)
{
pos++;
mas[pos]=mas[pos-1]->GetChildren();
} else
{
//если не идёт дальше пытаемся подняться в верх по дереву
while (true)
{
mas[pos] = mas[pos]->GetNext();
if(mas[pos]==NULL)
{
if(pos>0) pos--; else break;
} else
{
break;
}
}
}
}
*/
return NULL;
}
//------------------------------------------------------------------------------
//поиск узла по пути "type->objects->list->filter->column"
wxXmlNode* findNodeOnPath(wxXmlNode* node,wxString path)
{
if(node==NULL) return NULL;
path=path+_T("->");
while(true)
{
wxString name=getBeforeFirst(path,_T("->"));
node=findNode(node,name);
if(node==NULL) return NULL;
path=getAfterFirst(path,_T("->"));
if(path==_T("")) break;
}
return node;
}
//------------------------------------------------------------------------------
//Ищет первый CDATA и возврещяет его содержимое
wxString getCdataValue(wxXmlNode* node)
{
if(node==NULL) return _T("");
wxXmlNode* cdata=findNode(node,_T("cdata"));
if(cdata==NULL) return _T("");
return cdata->GetContent();
}
//------------------------------------------------------------------------------
//Присвоить значение первому CDATA узлу если его нет то создать
void setCdataValue(wxXmlNode* node,wxString val)
{
if(node==NULL) return;
wxXmlNode* cdata=findNode(node,_T("cdata"));
if(cdata==NULL) cdata=new wxXmlNode(node,wxXML_CDATA_SECTION_NODE, wxS("cdata"), wxS(""));
cdata->SetContent(val);
}
//------------------------------------------------------------------------------