mxml/index.html

200 lines
6.0 KiB
HTML
Raw Normal View History

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Mini-XML Home Page</title>
<style><!--
h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
h1.title, p.title { font-family: sans-serif; text-align: center; }
tt, pre, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
--></style>
</head>
<body>
<p class="title" align="center">[&nbsp;<a
href="../index.html">Back to Home Page</a>&nbsp;]</p>
<h1 class="title" align="center">Mini-XML Home Page</h1>
<p class="title" align="center">Current Release: v0.93 [&nbsp;<a
href="mxml-0.93.tar.gz">Download Source (.tar.gz 40k)</a> |
<a href="CHANGES">View Change Log</a>&nbsp;]</p>
<h2>Introduction</h2>
<p>Mini-XML is a small XML parsing library that you can use to
2003-06-03 19:46:29 +00:00
read XML and XML-like data files in your application without
requiring large non-standard libraries. Mini-XML only requires
an ANSI C compatible compiler (GCC works, as do most vendors'
ANSI C compilers) and a "make" program.</p>
2003-06-03 19:46:29 +00:00
<p>Mini-XML was created to support the basic hierarchy provided
2003-06-03 19:46:29 +00:00
by XML and some simple data types, but doesn't do validation or
other types of processing on the data.</p>
2003-06-03 19:46:29 +00:00
<h2>Building Mini-XML</h2>
2003-06-03 19:46:29 +00:00
<p>Mini-XML comes with an autoconf-based configure script; just
type the following command to get things going:</p>
2003-06-03 19:46:29 +00:00
<pre>
2003-06-03 19:46:29 +00:00
./configure
</pre>
2003-06-03 19:46:29 +00:00
<p>The default install prefix is /usr/local, which can be
overridden using the --prefix option:</p>
2003-06-03 19:46:29 +00:00
<pre>
2003-06-03 19:46:29 +00:00
./configure --prefix=/foo
</pre>
2003-06-03 19:46:29 +00:00
<p>Once you have configured the software, type "make" to do the
2003-06-03 19:46:29 +00:00
build and then run the test program to verify that things are
working, as follows:</p>
2003-06-03 19:46:29 +00:00
<pre>
2003-06-03 19:46:29 +00:00
make
./testmxml test.xml
</pre>
2003-06-03 19:46:29 +00:00
<h2>Installing Mini-XML</h2>
2003-06-03 19:46:29 +00:00
<p>The "install" target will install Mini-XML in the lib and
include directories:</p>
2003-06-03 19:46:29 +00:00
<pre>
2003-06-03 19:46:29 +00:00
make install
</pre>
2003-06-03 19:46:29 +00:00
<p>Once you have installed it, use the "-lmxml" option to link
your application against it.</p>
2003-06-03 19:46:29 +00:00
<h2>Documentation</h2>
2003-06-03 19:46:29 +00:00
<p>The documentation is currently just in this page. At some
point I'll probably do some proper documentation, but for now
just read here and look at the <tt><a
href="testmxml.c">testmxml.c</a></tt> source file for an
example of reading and printing the contents of an XML file to
stdout.</p>
2003-06-03 19:46:29 +00:00
<p>Mini-XML provides a single header file which you include:</p>
2003-06-03 19:46:29 +00:00
<pre>
<a href="mxml.h">#include &lt;mxml.h></a>
</pre>
2003-06-03 19:46:29 +00:00
<p>Nodes are defined by the <tt>mxml_node_t</tt> structure; the
<tt>type</tt> member defines the node type (element, integer,
opaque, real, or text) which determines which value you want to
look at in the <tt>value</tt> union. New nodes can be created
using the <tt>mxmlNewElement()</tt>, <tt>mxmlNewInteger()</tt>,
<tt>mxmlNewOpaque()</tt>, <tt>mxmlNewReal()</tt>, and
<tt>mxmlNewText()</tt> functions. Only elements can have child
nodes, and the top node must be an element, usually "?xml".</p>
2003-06-03 19:46:29 +00:00
<p>You load an XML file using the <tt>mxmlLoadFile()</tt> function:</p>
2003-06-03 19:46:29 +00:00
<pre>
2003-06-03 19:46:29 +00:00
FILE *fp;
mxml_node_t *tree;
fp = fopen("filename.xml", "r");
tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK);
fclose(fp);
</pre>
2003-06-03 19:46:29 +00:00
<p>Similarly, you save an XML file using the <tt>mxmlSaveFile()</tt>
function:</p>
2003-06-03 19:46:29 +00:00
<pre>
2003-06-03 19:46:29 +00:00
FILE *fp;
mxml_node_t *tree;
fp = fopen("filename.xml", "w");
mxmlSaveFile(tree, fp);
fclose(fp);
</pre>
2003-06-03 19:46:29 +00:00
<p>You can find a named element/node using the
<tt>mxmlFindElement()</tt> function:</p>
2003-06-03 19:46:29 +00:00
<pre>
mxml_node_t *node = mxmlFindElement(tree, tree, "name", "attr",
"value", MXML_DESCEND);
</pre>
2003-06-03 19:46:29 +00:00
<p>The <tt>name</tt>, <tt>attr</tt>, and <tt>value</tt>
arguments can be passed as <tt>NULL</tt> to act as wildcards,
e.g.:</p>
2003-06-03 19:46:29 +00:00
<pre>
/* Find the first "a" element */
node = mxmlFindElement(tree, tree, "a", NULL, NULL, MXML_DESCEND);
/* Find the first "a" element with "href" attribute */
node = mxmlFindElement(tree, tree, "a", "href", NULL, MXML_DESCEND);
/* Find the first "a" element with "href" to a URL */
node = mxmlFindElement(tree, tree, "a", "href",
"http://www.easysw.com/~mike/mxml/", MXML_DESCEND);
/* Find the first element with a "src" attribute*/
node = mxmlFindElement(tree, tree, NULL, "src", NULL, MXML_DESCEND);
/* Find the first element with a "src" = "foo.jpg" */
node = mxmlFindElement(tree, tree, NULL, "src", "foo.jpg", MXML_DESCEND);
</pre>
<p>You can also iterate with the same function:</p>
<pre>
2003-06-03 19:46:29 +00:00
mxml_node_t *node;
for (node = mxmlFindElement(tree, tree, "name", NULL, NULL, MXML_DESCEND);
2003-06-03 19:46:29 +00:00
node != NULL;
node = mxmlFindElement(node, tree, "name", NULL, NULL, MXML_DESCEND))
2003-06-03 19:46:29 +00:00
{
... do something ...
}
</pre>
2003-06-03 19:46:29 +00:00
<p>Finally, once you are done with the XML data, use the
<tt>mxmlDelete()</tt> function to recursively free the memory
that is used for a particular node or the entire tree:</p>
2003-06-03 19:46:29 +00:00
<pre>
2003-06-03 19:46:29 +00:00
mxmlDelete(tree);
</pre>
2003-06-03 19:46:29 +00:00
<h2>Getting Help and Reporting Problems</h2>
2003-06-03 19:46:29 +00:00
<p>You can email me at "mxml <i>at</i> easysw <i>dot</i> com" to
2003-06-03 19:46:29 +00:00
report problems and/or ask for help. Just don't expect an
instant response, as I get a <i>lot</i> of email...</p>
2003-06-03 19:46:29 +00:00
<h2>Legal Stuff</h2>
2003-06-03 19:46:29 +00:00
<p>The Mini-XML library is Copyright 2003 by Michael Sweet.</p>
2003-06-03 19:46:29 +00:00
<p>This library is free software; you can redistribute it
2003-06-03 19:46:29 +00:00
and/or modify it under the terms of the GNU Library General
Public License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any
later version.</p>
2003-06-03 19:46:29 +00:00
<p>This library is distributed in the hope that it will be
2003-06-03 19:46:29 +00:00
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU Library General Public License for
more details.</p>
2003-06-03 19:46:29 +00:00
<p>You should have received a copy of the GNU Library General
2003-06-03 19:46:29 +00:00
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
02139, USA.</p>
2003-06-03 19:46:29 +00:00
</body>
</html>