git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10489 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			140 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Author:      Vaclav Slavik
 | |
| // Created:     2000/05/05
 | |
| // RCS-ID:      $Id$
 | |
| // Copyright:   (c) 2000 Vaclav Slavik
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifdef __GNUG__
 | |
|     #pragma implementation "xmlhelpr.h"
 | |
| #endif
 | |
| 
 | |
| // For compilers that support precompilation, includes "wx/wx.h".
 | |
| #include "wx/wxprec.h"
 | |
| 
 | |
| #ifdef __BORLANDC__
 | |
|     #pragma hdrstop
 | |
| #endif
 | |
| 
 | |
| #include "wx/xrc/xml.h"
 | |
| #include "wx/wx.h"
 | |
| #include "wx/tokenzr.h"
 | |
| #include "xmlhelpr.h"
 | |
| 
 | |
| 
 | |
| 
 | |
| wxXmlNode *XmlFindNodeSimple(wxXmlNode *parent, const wxString& param)
 | |
| {
 | |
|     if (param.IsEmpty()) return parent;
 | |
| 
 | |
|     wxXmlNode *n = parent->GetChildren();
 | |
|     
 | |
|     while (n)
 | |
|     {
 | |
|         if (n->GetType() == wxXML_ELEMENT_NODE && n->GetName() == param)
 | |
|             return n;
 | |
|         n = n->GetNext();
 | |
|     }
 | |
|     return NULL;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| wxXmlNode *XmlFindNode(wxXmlNode *parent, const wxString& path)
 | |
| {
 | |
|     wxXmlNode *n = parent;
 | |
|     wxStringTokenizer tkn(path, _T("/"));
 | |
|     while (tkn.HasMoreTokens())
 | |
|     {
 | |
|         n = XmlFindNodeSimple(n, tkn.GetNextToken());
 | |
|         if (n == NULL) break;
 | |
|     }
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| wxXmlNode *XmlCreateNode(wxXmlNode *parent, const wxString& name)
 | |
| {
 | |
|     wxXmlNode *n;
 | |
|     wxString nm;
 | |
| 
 | |
|     wxStringTokenizer tkn(name, _T("/"));
 | |
|     n = parent;
 | |
|     while (tkn.HasMoreTokens())
 | |
|     {
 | |
|         parent = n;
 | |
|         nm = tkn.GetNextToken();
 | |
|         n = XmlFindNodeSimple(parent, nm);
 | |
|         if (n) continue;
 | |
|         
 | |
|         // n == NULL:
 | |
|         n = new wxXmlNode(wxXML_ELEMENT_NODE, nm);
 | |
|         parent->AddChild(n);        
 | |
|     }
 | |
|     n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString));
 | |
|     
 | |
|     return n;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
 | |
| {
 | |
|     wxXmlNode *n = XmlFindNode(parent, name);
 | |
|     if (n == NULL)
 | |
|         n = XmlCreateNode(parent, name);
 | |
|     
 | |
|     n = n->GetChildren();
 | |
|     
 | |
|     while (n)
 | |
|     {
 | |
|         if (n->GetType() == wxXML_TEXT_NODE || 
 | |
|             n->GetType() == wxXML_CDATA_SECTION_NODE)
 | |
|         {
 | |
|             n->SetContent(value);
 | |
|             break;
 | |
|         }
 | |
|         n = n->GetNext();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| wxString XmlReadValue(wxXmlNode *parent, const wxString& name)
 | |
| {
 | |
|     wxXmlNode *n = XmlFindNode(parent, name);
 | |
|     if (n == NULL) return wxEmptyString;
 | |
|     n = n->GetChildren();
 | |
|     
 | |
|     while (n)
 | |
|     {
 | |
|         if (n->GetType() == wxXML_TEXT_NODE || 
 | |
|             n->GetType() == wxXML_CDATA_SECTION_NODE)
 | |
|             return n->GetContent();
 | |
|         n = n->GetNext();
 | |
|     }
 | |
|     return wxEmptyString;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| wxString XmlGetClass(wxXmlNode *parent)
 | |
| {
 | |
|     return parent->GetPropVal(_T("class"), wxEmptyString);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| void XmlSetClass(wxXmlNode *parent, const wxString& classname)
 | |
| {
 | |
|     parent->DeleteProperty(_T("class"));
 | |
|     parent->AddProperty(_T("class"), classname);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |