первый
This commit is contained in:
132
lib/xmlTools.cpp
Normal file
132
lib/xmlTools.cpp
Normal 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);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user