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.
118 lines
4.7 KiB
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 "nodes". 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->value.custom.data</TT></TD></TR>
|
|
<TR><TD>Element</TD><TD><TT>char *</TT></TD><TD><TT>
|
|
node->value.element.name</TT></TD></TR>
|
|
<TR><TD>Integer</TD><TD><TT>int</TT></TD><TD><TT>node->value.integer</TT>
|
|
</TD></TR>
|
|
<TR><TD>Opaque (string)</TD><TD><TT>char *</TT></TD><TD><TT>
|
|
node->value.opaque</TT></TD></TR>
|
|
<TR><TD>Real</TD><TD><TT>double</TT></TD><TD><TT>node->value.real</TT></TD>
|
|
</TR>
|
|
<TR><TD>Text</TD><TD><TT>char *</TT></TD><TD><TT>node->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><?xml version="1.0"?></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>
|
|
<?xml version="1.0"?>
|
|
<data>
|
|
<node>val1</node>
|
|
<node>val2</node>
|
|
<node>val3</node>
|
|
<group>
|
|
<node>val4</node>
|
|
<node>val5</node>
|
|
<node>val6</node>
|
|
</group>
|
|
<node>val7</node>
|
|
<node>val8</node>
|
|
</data>
|
|
</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 "-" is a pointer to the next node and "|" 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>
|
|
|