#include "wx/xml/xml.h"
#include "wx/wx.h"
+#include "wx/tokenzr.h"
#include "xmlhelpr.h"
-wxXmlNode *XmlFindNode(wxXmlNode *parent, const wxString& param)
+wxXmlNode *XmlFindNodeSimple(wxXmlNode *parent, const wxString& param)
{
+ if (param.IsEmpty()) return parent;
+
wxXmlNode *n = parent->GetChildren();
while (n)
}
-void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
+
+wxXmlNode *XmlFindNode(wxXmlNode *parent, const wxString& path)
{
- wxXmlNode *n = XmlFindNode(parent, name);
- if (n == NULL)
+ 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())
{
- n = new wxXmlNode(wxXML_ELEMENT_NODE, name);
- parent->AddChild(n);
- n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, ""));
+ 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();