2006-04-30 07:37:12 -04:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
%% Name: xmlnode.tex
|
|
|
|
%% Purpose: wxXmlDocument documentation
|
|
|
|
%% Author: Francesco Montorsi
|
|
|
|
%% Created: 2006-04-18
|
|
|
|
%% RCS-ID: $Id$
|
|
|
|
%% Copyright: (c) 2006 Francesco Montorsi
|
|
|
|
%% License: wxWindows license
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
2006-03-11 08:43:58 -05:00
|
|
|
\section{\class{wxXmlDocument}}\label{wxxmldocument}
|
|
|
|
|
|
|
|
This class holds XML data/document as parsed by XML parser in the root node.
|
|
|
|
|
|
|
|
wxXmlDocument internally uses the expat library which comes with wxWidgets to parse the given stream.
|
|
|
|
|
2006-04-30 07:37:12 -04:00
|
|
|
A simple example of using XML classes is:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
wxXmlDocument doc;
|
2006-09-11 07:08:49 -04:00
|
|
|
if (!doc.Load(wxT("myfile.xml")))
|
2006-04-30 07:37:12 -04:00
|
|
|
return false;
|
|
|
|
|
|
|
|
// start processing the XML file
|
|
|
|
if (doc.GetRoot()->GetName() != wxT("myroot-node"))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
wxXmlNode *child = doc.GetRoot()->GetChildren();
|
|
|
|
while (child) {
|
|
|
|
|
|
|
|
if (child->GetName() == wxT("tag1")) {
|
|
|
|
|
|
|
|
// process text enclosed by <tag1></tag1>
|
|
|
|
wxString content = child->GetNodeContent();
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
// process properties of <tag1>
|
|
|
|
wxString propvalue1 = child->GetPropVal(wxT("prop1"), wxT("default-value"));
|
|
|
|
wxString propvalue2 = child->GetPropVal(wxT("prop2"), wxT("default-value"));
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
} else if (child->GetName() == wxT("tag2")) {
|
|
|
|
|
|
|
|
// process tag2 ...
|
|
|
|
}
|
|
|
|
|
|
|
|
child = child->GetNext();
|
|
|
|
}
|
|
|
|
\end{verbatim}
|
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
{\bf Note:} if you want to preserve the original formatting of the loaded file including whitespaces
|
|
|
|
and indentation, you need to turn off whitespace-only textnode removal and automatic indentation:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
wxXmlDocument doc;
|
|
|
|
doc.Load(wxT("myfile.xml"), wxT("UTF-8"), wxXMLDOC_KEEP_WHITESPACE_NODES);
|
|
|
|
doc.Save(wxT("myfile2.xml"), wxXML_NO_INDENTATION); // myfile2.xml will be indentic to myfile.xml
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Using default parameters, you will get a reformatted document which in general is different from
|
|
|
|
the original loaded content:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
wxXmlDocument doc;
|
|
|
|
doc.Load(wxT("myfile.xml"));
|
|
|
|
doc.Save(wxT("myfile2.xml")); // myfile2.xml != myfile.xml
|
|
|
|
\end{verbatim}
|
2006-04-30 07:37:12 -04:00
|
|
|
|
|
|
|
|
2006-03-11 08:43:58 -05:00
|
|
|
\wxheading{Derived from}
|
|
|
|
|
|
|
|
\helpref{wxObject}{wxobject}
|
|
|
|
|
|
|
|
\wxheading{Include files}
|
|
|
|
|
|
|
|
<wx/xml/xml.h>
|
|
|
|
|
|
|
|
\wxheading{See also}
|
|
|
|
|
|
|
|
\helpref{wxXmlNode}{wxxmlnode}, \helpref{wxXmlProperty}{wxxmlproperty}
|
|
|
|
|
|
|
|
|
|
|
|
\latexignore{\rtfignore{\wxheading{Members}}}
|
|
|
|
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::wxXmlDocument}\label{wxxmldocumentwxxmldocument}
|
|
|
|
|
|
|
|
\func{}{wxXmlDocument}{\void}
|
|
|
|
|
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
\func{}{wxXmlDocument}{\param{const wxString\& }{filename}, \param{const wxString\& }{encoding = wxT("UTF-8")}, \param{int }{flags = wxXMLDOC_NONE}}
|
2006-03-11 08:43:58 -05:00
|
|
|
|
|
|
|
Loads the given {\it filename} using the given encoding. See \helpref{Load()}{wxxmldocumentload}.
|
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
\func{}{wxXmlDocument}{\param{wxInputStream\& }{stream}, \param{const wxString\& }{encoding = wxT("UTF-8")}, \param{int }{flags = wxXMLDOC_NONE}}
|
2006-03-11 08:43:58 -05:00
|
|
|
|
|
|
|
Loads the XML document from given stream using the given encoding. See \helpref{Load()}{wxxmldocumentload}.
|
|
|
|
|
|
|
|
\func{}{wxXmlDocument}{\param{const wxXmlDocument\& }{doc}}
|
|
|
|
|
|
|
|
Copy constructor.
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::\destruct{wxXmlDocument}}\label{wxxmldocumentdtor}
|
|
|
|
|
|
|
|
\func{}{\destruct{wxXmlDocument}}{\void}
|
|
|
|
|
|
|
|
Virtual destructor. Frees the document root node.
|
|
|
|
|
2006-09-09 07:35:32 -04:00
|
|
|
|
|
|
|
\membersection{wxXmlDocument::DetachRoot}\label{wxxmldocumentdetachroot}
|
|
|
|
|
|
|
|
\func{wxXmlNode*}{DetachRoot}{\void}
|
|
|
|
|
|
|
|
Detaches the document root node and returns it. The document root node will be set to \NULL
|
|
|
|
and thus \helpref{IsOk}{wxxmldocumentisok} will return \false after calling this function.
|
|
|
|
|
|
|
|
Note that the caller is reponsible for deleting the returned node in order to avoid memory leaks.
|
|
|
|
|
|
|
|
|
2006-03-11 08:43:58 -05:00
|
|
|
\membersection{wxXmlDocument::GetEncoding}\label{wxxmldocumentgetencoding}
|
|
|
|
|
|
|
|
\constfunc{wxString}{GetEncoding}{\void}
|
|
|
|
|
|
|
|
Returns encoding of in-memory representation of the document
|
|
|
|
(same as passed to \helpref{Load()}{wxxmldocumentload} or constructor, defaults to UTF-8).
|
|
|
|
|
|
|
|
NB: this is meaningless in Unicode build where data are stored as wchar\_t*.
|
|
|
|
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::GetFileEncoding}\label{wxxmldocumentgetfileencoding}
|
|
|
|
|
|
|
|
\constfunc{wxString}{GetFileEncoding}{\void}
|
|
|
|
|
|
|
|
Returns encoding of document (may be empty).
|
|
|
|
|
|
|
|
Note: this is the encoding original file was saved in, *not* the
|
|
|
|
encoding of in-memory representation!
|
|
|
|
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::GetRoot}\label{wxxmldocumentgetroot}
|
|
|
|
|
|
|
|
\constfunc{wxXmlNode*}{GetRoot}{\void}
|
|
|
|
|
|
|
|
Returns the root node of the document.
|
|
|
|
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::GetVersion}\label{wxxmldocumentgetversion}
|
|
|
|
|
|
|
|
\constfunc{wxString}{GetVersion}{\void}
|
|
|
|
|
|
|
|
Returns the version of document.
|
|
|
|
This is the value in the {\tt <?xml version="1.0"?>} header of the XML document.
|
|
|
|
If the version property was not explicitely given in the header, this function
|
|
|
|
returns an empty string.
|
|
|
|
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::IsOk}\label{wxxmldocumentisok}
|
|
|
|
|
|
|
|
\constfunc{bool}{IsOk}{\void}
|
|
|
|
|
|
|
|
Returns \true if the document has been loaded successfully.
|
|
|
|
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::Load}\label{wxxmldocumentload}
|
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
\func{bool}{Load}{\param{const wxString\& }{filename}, \param{const wxString\& }{encoding = wxT("UTF-8")}, \param{int }{flags = wxXMLDOC_NONE}}
|
2006-03-11 08:43:58 -05:00
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
Parses {\it filename} as an xml document and loads its data.
|
2006-03-11 08:43:58 -05:00
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
If {\tt flags} does not contain {\tt wxXMLDOC_KEEP_WHITESPACE_NODES}, then, while loading, all nodes of
|
|
|
|
type {\tt wxXML_TEXT_NODE} (see \helpref{wxXmlNode}{wxxmlnode}) are automatically skipped if they
|
|
|
|
contain whitespaces only.
|
|
|
|
The removal of these nodes makes the load process slightly faster and requires less memory however
|
|
|
|
makes impossible to recreate exactly the loaded text with a \helpref{Save}{wxxmldocumentsave} call later.
|
|
|
|
Read the initial description of this class for more info.
|
|
|
|
|
|
|
|
Returns \true on success, \false otherwise.
|
|
|
|
|
|
|
|
\func{bool}{Load}{\param{wxInputStream\& }{stream}, \param{const wxString\& }{encoding = wxT("UTF-8")}, \param{int }{flags = wxXMLDOC_NONE}}
|
2006-03-11 08:43:58 -05:00
|
|
|
|
|
|
|
Like above but takes the data from given input stream.
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::Save}\label{wxxmldocumentsave}
|
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
\constfunc{bool}{Save}{\param{const wxString\& }{filename}, \param{int }{indentstep = 1}}
|
2006-03-11 08:43:58 -05:00
|
|
|
|
|
|
|
Saves XML tree creating a file named with given string.
|
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
If {\tt indentstep} is greater than or equal to zero, then, while saving, an automatic indentation
|
|
|
|
is added with steps composed by {\tt indentstep} spaces.
|
|
|
|
If {\tt indentstep} is {\tt wxXML_NO_INDENTATION}, then, automatic indentation is turned off.
|
|
|
|
|
|
|
|
\constfunc{bool}{Save}{\param{wxOutputStream\& }{stream}, \param{int }{indentstep = 1}}
|
2006-03-11 08:43:58 -05:00
|
|
|
|
2006-09-11 07:08:49 -04:00
|
|
|
Saves XML tree in the given output stream. See other overload for a description of {\tt indentstep}.
|
2006-03-11 08:43:58 -05:00
|
|
|
|
|
|
|
\membersection{wxXmlDocument::SetEncoding}\label{wxxmldocumentsetencoding}
|
|
|
|
|
|
|
|
\func{void}{SetEncoding}{\param{const wxString\& }{enc}}
|
|
|
|
|
|
|
|
Sets the enconding of the document.
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::SetFileEncoding}\label{wxxmldocumentsetfileencoding}
|
|
|
|
|
|
|
|
\func{void}{SetFileEncoding}{\param{const wxString\& }{encoding}}
|
|
|
|
|
|
|
|
Sets the enconding of the file which will be used to save the document.
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::SetRoot}\label{wxxmldocumentsetroot}
|
|
|
|
|
|
|
|
\func{void}{SetRoot}{\param{wxXmlNode* }{node}}
|
|
|
|
|
|
|
|
Sets the root node of this document. Deletes previous root node.
|
2006-09-09 07:35:32 -04:00
|
|
|
Use \helpref{DetachRoot}{wxxmlnodedetachroot} and then SetRoot if you want to
|
|
|
|
replace the root node without deleting the old document tree.
|
2006-03-11 08:43:58 -05:00
|
|
|
|
|
|
|
\membersection{wxXmlDocument::SetVersion}\label{wxxmldocumentsetversion}
|
|
|
|
|
|
|
|
\func{void}{SetVersion}{\param{const wxString\& }{version}}
|
|
|
|
|
|
|
|
Sets the version of the XML file which will be used to save the document.
|
|
|
|
|
|
|
|
\membersection{wxXmlDocument::operator=}\label{wxxmldocumentoperatorassign}
|
|
|
|
|
|
|
|
\func{wxXmlDocument\& operator}{operator=}{\param{const wxXmlDocument\& }{doc}}
|
|
|
|
|
|
|
|
Copies the given document.
|
|
|
|
|