This is an archived tutorial from the kirupa.com legacy collection. It covers software that may no longer be available, but it is kept online because the ideas still hold up.
If you are looking at this tutorial then you probably have a good idea in your head about what XML is and what you can do with it. However, for those of you that stumbled across this tutorial on accident and are interested in learning more, I will briefly explain what XML is and what it is used for. XML stands for eXtensible Markup Language and is used primarily for data storage and organization. It is useful for many things but the main thing I like about it is that there are no predefined tags; the author of the code completely creates the tags as he goes along. A sample xml code could look like this:
<?xml version="1.0"?>
<friends>
<joe/>
<karen/>
<bob/>
</friends>
As you can see the code is easy to read and understand. We can clearly see every tag and easily read them in plain English, or whatever language you are most comfortable with. Unfortunately this tutorial isn't about XML so if you wish to learn more about it then there are some good resources to be found all over the internet. Here are a couple of them:
Formatting XML
Ok, so you're probably asking, "Now what?" We have our XML
code but when you view the XML page in the browser all you
see is the XML code! That won't do! We need to find a way to
format it. There are actually many ways to do this. I prefer
to use PHP to get the job done. And that is what this
tutorial is all about; using PHP to parse and format an XML
document. If you don't know anything about PHP then you
might not want to start here. A good place to start is
php.net.
They have a great beginner tutorial for dealing with the
basics of PHP.
Now, before I continue I want to let everyone know that the following methods are simply the ways in which I prefer to go about getting the job done. They are in no way the only complete and comprehensive ways to do anything, ever, for any reason. If you think you have a better way then by all means, do it your way and if you like, please let me know about your way. With that said...
As with any project, organization is the key. I'm not very good at being organized so most of my projects take forever to complete. Kind of like this tutorial which I have been trying to write for weeks now and I keep putting it off because of one thing or another. My apartment is a disaster and I should be cleaning that right now, but instead I am typing this up. Oh, well... Organization... yeah that. Well, since this is the easy level tutorial about XML parsing the actual XML I am going to use is super-duper simple:
<?xml version="1.0"?>
<numbers>
<num>1</num>
<num>2</num>
<num>3</num>
<num>4</num>
<num>5</num>
<num>6</num>
<num>7</num>
<num>8</num>
<num>9</num>
<num>10</num>
</numbers>
A simple list of numbers 1-10 with opening and closing tags for each number and then the higher level group tag "numbers" that contains all of the information in the XML document. That's really all for the XML. The majority of this tutorial is about PHP and introducing you to the functions that are necessary for formatting the XML.
To make this easy on us, I will post the code I used and then explain what each line does after.
<?php $file = "xml_beginner.xml"; function contents($parser, $data){ echo $data; } function startTag($parser, $data){ echo "<b>"; } function endTag($parser, $data){ echo "</b><br />"; } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startTag", "endTag"); xml_set_character_data_handler($xml_parser, "contents"); $fp = fopen($file, "r"); $data = fread($fp, 80000); if(!(xml_parse($xml_parser, $data, feof($fp)))){ die("Error on line " . xml_get_current_line_number($xml_parser)); } xml_parser_free($xml_parser); fclose($fp); ?>
Ok, the basic set up is easy. You need 3 major things:
-A function to handle the start tags
-A function to handle the data between the tags
-A function to handle the end tags
Thats what we have here:
function
startTag($parser,
$data){
echo "<b>";
}
function contents($parser,
$data){
echo $data;
}
function
endTag($parser,
$data){
echo "</b><br />";
}
When the script comes across a start tag it will replace it
with a <b>. When the script reads data between the tags it
will simply output the data; and when an end tag is read it
outputs </b><br /> to close the bold tag and go to the next
line.
Now for the XML functions, we need to:
Creating the parser is easy:
$xml_parser
=
xml_parser_create();
Setting the start tag, end tag, and data handlers are pretty
easy as well:
xml_set_element_handler($xml_parser,
"startTag",
"endTag");
xml_set_character_data_handler($xml_parser,
"contents");
The first argument for both of these functions is always the
name of the parser we created in the previous step. The next
arguments are the functions we created a little earlier.
Next up is opening and reading the XML file:
$fp =
fopen($file,
"r");
$data
= fread($fp,
80000);
These are basic file handling functions that you should be
familiar with by now. If you need to learn more or just
refresh your memory you can check out the great tutorials on
php.net.
The next bit of code is the most complex and the last
complex thing about this script. Basically this code does
two things: 1) it parses through the XML data from the XML
file, and 2) if the parse fails it outputs an error message
complete with line number.
if(!(xml_parse($xml_parser,
$data,
feof($fp)))){
die("Error on line "
.
xml_get_current_line_number($xml_parser));
}
Again the first argument of the function is our parser. The
second argument is the data to be parsed, in this case the
variable $data. The third argument tells the function to
keep parsing until it reaches the end of the file.
The next two lines just wrap up the script. The first one
frees up the memory used by the server to create the parser
and the second closes the XML file. Both of these lines are
very important so do not
forget to include them in your script. Failure to do so
could result in problems with your server.
xml_parser_free($xml_parser);
fclose($fp);
Well again, you are probably asking, "Now what?" Well the
only thing left to do is save your PHP file and run the
script. Make sure that the PHP file and the XML file are in
the same directory and that you have permission to read the
XML file on the server. The output for this file isn't
anything exciting, but if you did it correctly you should
get this as your source:
<b>
<b>1</b><br />
<b>2</b><br />
<b>3</b><br />
<b>4</b><br />
<b>5</b><br />
<b>6</b><br />
<b>7</b><br />
<b>8</b><br />
<b>9</b><br />
<b>10</b><br />
</b><br />
That is pretty much it. There are a couple things to
remember when working with XML.
You can download my source files for this tutorial to look at the commented code here, and if you have any questions the best place to ask would be on the forums in the Server-side Scripting Forum.
|
|
Jubba |
Just a final word before we wrap up. What you've seen here is freshly baked content without added preservatives, artificial intelligence, ads, and algorithm-driven doodads. A huge thank you to all of you who buy kirupa's books, became a paid subscriber, watch the videos, and/or interact on the forums.
Your support keeps this site going! 😇
:: Copyright KIRUPA 2026 //--