You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
mxml/www/docfiles/Nodes.html

118 lines
4.7 KiB

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>Mini-XML Programmers Manual, Version 2.3</TITLE>
<META NAME="author" CONTENT="Michael R. Sweet">
<META NAME="copyright" CONTENT="Copyright 2003-2007">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-iso-8859-1">
<LINK REL="Start" HREF="index.html">
<LINK REL="Contents" HREF="index.html">
<LINK REL="Prev" HREF="TheBasics.html">
<LINK REL="Next" HREF="CreatingXMLDocuments.html">
<STYLE TYPE="text/css"><!--
BODY { font-family: sans-serif }
H1 { font-family: sans-serif }
H2 { font-family: sans-serif }
H3 { font-family: sans-serif }
H4 { font-family: sans-serif }
H5 { font-family: sans-serif }
H6 { font-family: sans-serif }
SUB { font-size: smaller }
SUP { font-size: smaller }
PRE { font-family: monospace }
A { text-decoration: none }
--></STYLE>
</HEAD>
<BODY>
<A HREF="index.html">Contents</A>
<A HREF="TheBasics.html">Previous</A>
<A HREF="CreatingXMLDocuments.html">Next</A>
<HR NOSHADE>
<H2><A NAME="3_2">Nodes</A></H2>
<P>Every piece of information in an XML file (elements, text, numbers)
is stored in memory in &quot;nodes&quot;. Nodes are defined by the <A href="mxmlnodet.html#mxml_node_t">
<TT>mxml_node_t</TT></A> structure. The <A href="#mxml_type_t"><TT>type</TT>
</A> member defines the node type (element, integer, opaque, real, or
text) which determines which value you want to look at in the <A href="mxmlvaluet.html#mxml_value_t">
<TT>value</TT></A> union.</P>
<!-- NEED 10 -->
<CENTER>
<TABLE border="1" cellpadding="5" cellspacing="0" summary="Mini-XML Node Value Members"
width="80%"><CAPTION align="bottom"><I> Table 2-1: Mini-XML Node Value
Members</I></CAPTION>
<TR bgcolor="#cccccc"><TH>Value</TH><TH>Type</TH><TH>Node member</TH></TR>
<TR><TD>Custom</TD><TD><TT>void *</TT></TD><TD><TT>
node-&gt;value.custom.data</TT></TD></TR>
<TR><TD>Element</TD><TD><TT>char *</TT></TD><TD><TT>
node-&gt;value.element.name</TT></TD></TR>
<TR><TD>Integer</TD><TD><TT>int</TT></TD><TD><TT>node-&gt;value.integer</TT>
</TD></TR>
<TR><TD>Opaque (string)</TD><TD><TT>char *</TT></TD><TD><TT>
node-&gt;value.opaque</TT></TD></TR>
<TR><TD>Real</TD><TD><TT>double</TT></TD><TD><TT>node-&gt;value.real</TT></TD>
</TR>
<TR><TD>Text</TD><TD><TT>char *</TT></TD><TD><TT>node-&gt;value.text.string</TT>
</TD></TR>
</TABLE>
</CENTER>
<P>Each node also has a <TT>user_data</TT> member which allows you to
associate application-specific data with each node as needed.</P>
<P>New nodes are created using the <A href="mxmlNewElement.html#mxmlNewElement">
<TT>mxmlNewElement</TT></A>, <A href="mxmlNewInteger.html#mxmlNewInteger">
<TT>mxmlNewInteger</TT></A>, <A href="mxmlNewOpaque.html#mxmlNewOpaque"><TT>
mxmlNewOpaque</TT></A>, <A href="mxmlNewReal.html#mxmlNewReal"><TT>
mxmlNewReal</TT></A>, <A href="mxmlNewText.html#mxmlNewText"><TT>
mxmlNewText</TT></A> <A href="mxmlNewTextf.html#mxmlNewTextf"><TT>
mxmlNewTextf</TT></A> <A href="MiniXML23mxmlNewXML.html#mxmlNewXML"><TT>
mxmlNewXML</TT></A> functions. Only elements can have child nodes, and
the top node must be an element, usually the <TT>&lt;?xml version=&quot;1.0&quot;?&gt;</TT>
node created by <TT>mxmlNewXML()</TT>.</P>
<P>Nodes have pointers to the node above (<TT>parent</TT>), below (<TT>
child</TT>), left (<TT>prev</TT>), and right (<TT>next</TT>) of the
current node. If you have an XML file like the following:</P>
<PRE>
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;data&gt;
&lt;node&gt;val1&lt;/node&gt;
&lt;node&gt;val2&lt;/node&gt;
&lt;node&gt;val3&lt;/node&gt;
&lt;group&gt;
&lt;node&gt;val4&lt;/node&gt;
&lt;node&gt;val5&lt;/node&gt;
&lt;node&gt;val6&lt;/node&gt;
&lt;/group&gt;
&lt;node&gt;val7&lt;/node&gt;
&lt;node&gt;val8&lt;/node&gt;
&lt;/data&gt;
</PRE>
<P>the node tree for the file would look like the following in memory:</P>
<PRE>
?xml
|
data
|
node - node - node - group - node - node
| | | | | |
val1 val2 val3 | val7 val8
|
node - node - node
| | |
val4 val5 val6
</PRE>
<P>where &quot;-&quot; is a pointer to the next node and &quot;|&quot; is a pointer to the
first child node.</P>
<P>Once you are done with the XML data, use the <A href="mxmlDelete.html#mxmlDelete">
<TT>mxmlDelete</TT></A> function to recursively free the memory that is
used for a particular node or the entire tree:</P>
<PRE>
mxmlDelete(tree);
</PRE>
<!-- NEW PAGE -->
<HR NOSHADE>
<A HREF="index.html">Contents</A>
<A HREF="TheBasics.html">Previous</A>
<A HREF="CreatingXMLDocuments.html">Next</A>
</BODY>
</HTML>