if (param.IsEmpty()) return parent;
wxXmlNode *n = parent->GetChildren();
-
+
while (n)
{
if (n->GetType() == wxXML_ELEMENT_NODE && n->GetName() == param)
-void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
+wxXmlNode *XmlCreateNode(wxXmlNode *parent, const wxString& name)
{
- wxXmlNode *n = XmlFindNode(parent, name);
- if (n == NULL)
+ wxXmlNode *n;
+ wxString nm;
+
+ wxStringTokenizer tkn(name, _T("/"));
+ n = parent;
+ while (tkn.HasMoreTokens())
{
- wxString pname = name.BeforeLast(_T('/'));
- if (pname.IsEmpty()) pname = name;
- wxXmlNode *p = XmlFindNode(parent, pname);
- if (p == NULL) p = parent;
- n = new wxXmlNode(wxXML_ELEMENT_NODE, name.AfterLast(_T('/')));
- p->AddChild(n);
- n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString));
+ 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 ||
+ if (n->GetType() == wxXML_TEXT_NODE ||
n->GetType() == wxXML_CDATA_SECTION_NODE)
{
n->SetContent(value);
wxXmlNode *n = XmlFindNode(parent, name);
if (n == NULL) return wxEmptyString;
n = n->GetChildren();
-
+
while (n)
{
- if (n->GetType() == wxXML_TEXT_NODE ||
+ if (n->GetType() == wxXML_TEXT_NODE ||
n->GetType() == wxXML_CDATA_SECTION_NODE)
return n->GetContent();
n = n->GetNext();