<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ideawaza.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=72.54.0.0%2F16</id>
	<title>IdeaWazaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://ideawaza.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=72.54.0.0%2F16"/>
	<link rel="alternate" type="text/html" href="https://ideawaza.com/wiki/Special:Contributions/72.54.0.0/16"/>
	<updated>2026-09-29T21:56:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://ideawaza.com/index.php?title=Archive:PHP_and_MySQL_Programming/XML_and_PHP&amp;diff=42851</id>
		<title>Archive:PHP and MySQL Programming/XML and PHP</title>
		<link rel="alternate" type="text/html" href="https://ideawaza.com/index.php?title=Archive:PHP_and_MySQL_Programming/XML_and_PHP&amp;diff=42851"/>
		<updated>2007-08-09T20:10:44Z</updated>

		<summary type="html">&lt;p&gt;72.54.177.34: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
XML (eXtensible Markup Language) is used in mainstream development. It might have started off as an attempt at a web standard, but is now used even in more traditional applications as a document standard. For example, the Open Document Format employed by Sun in their StarOffice and OpenOffice suites is based on XML pawan .&lt;br /&gt;
&lt;br /&gt;
Because of its wide-spread use in the IT industry, it is fitting that we as PHP developers know how to make use of XML files in our PHP applications.&lt;br /&gt;
&lt;br /&gt;
== XML Structure ==&lt;br /&gt;
&lt;br /&gt;
Since XML documents are extensible, there are no limits to the tags that you can create to define data with. Here is an example of a simple XML document :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;document&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Isn&#039;t this simple!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;XML is as simple as pie. :-)&amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/document&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason that it looks so simple, is because it is so simple! Just as in HTML, elements are enclosed by angled brackets : &amp;quot;&amp;lt;&amp;quot; and &amp;quot;&amp;gt;&amp;quot;, where the start element differs from the end element by the exclusion of a forward slash : &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Creating an XML Parser in PHP ==&lt;br /&gt;
&lt;br /&gt;
=== Defining the XML Parser ===&lt;br /&gt;
&lt;br /&gt;
In PHP, you define an XML Parser by using the xml_parser_create() function as shown below.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 $parser = xml_parser_create(ENCODING);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can think of the $parser variable in terms of a parsing engine for the XML document. Note that the ENCODING can be either :&lt;br /&gt;
&lt;br /&gt;
1. ISO-8859-1 (default)&lt;br /&gt;
&lt;br /&gt;
2. US-ASCII&lt;br /&gt;
&lt;br /&gt;
3. UTF-8&lt;br /&gt;
&lt;br /&gt;
=== Defining the Element Handlers ===&lt;br /&gt;
&lt;br /&gt;
Element handlers are defined by means of the xml_set_element_handler() function as follows :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 xml_set_element_handler(XML_PARSER, START_FUNCTION, END_FUNCTION);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The three arguments accepted by the xml_set_element_handler() function are :&lt;br /&gt;
&lt;br /&gt;
1. XML_PARSER - The variable that you created when you called the xml_parser_create() function.&lt;br /&gt;
&lt;br /&gt;
2. START_FUNCTION - The name of the function to call when the parser encounters a start element.&lt;br /&gt;
&lt;br /&gt;
3. END_FUNCTION - The name of the function to call when the parser encounters an end element.&lt;br /&gt;
&lt;br /&gt;
e.g. :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 $parser = xml_parser_create();&lt;br /&gt;
 xml_set_element_handler($parser, &amp;quot;startElement&amp;quot;, &amp;quot;endElement&amp;quot;);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Defining Character Handlers ===&lt;br /&gt;
&lt;br /&gt;
Character handlers are created by means of the set_character_handler() function as follows :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 xml_set_character_handler(XML_PARSER, CHARACTER_FUNCTION);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two arguments accepted by the set_character_handler() function are :&lt;br /&gt;
&lt;br /&gt;
1. XML_PARSER - The variable that you created when you called the xml_parser_create() function.&lt;br /&gt;
&lt;br /&gt;
2. CHARACTER_FUNCTION - The name of the function to call when the parser encounters character data.&lt;br /&gt;
&lt;br /&gt;
=== Starting the Parser ===&lt;br /&gt;
&lt;br /&gt;
To finally start the parser, we call the xml_parse() function as follows :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 xml_parse(XML_PARSER, XML);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two arguments accepted by the xml_parse() function are :&lt;br /&gt;
&lt;br /&gt;
1. The variable that you created when you called the xml_parser_create() function.&lt;br /&gt;
&lt;br /&gt;
2. The XML that is to be parsed.&lt;br /&gt;
&lt;br /&gt;
e.g. : &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 $f = fopen (&amp;quot;simple.xml&amp;quot;, &#039;r&#039;);&lt;br /&gt;
 $data = fread($f, filesize(&amp;quot;simple.xml&amp;quot;));&lt;br /&gt;
 xml_parse($parser, $data);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cleaning Up ===&lt;br /&gt;
&lt;br /&gt;
After parsing an XML document, it is considered good practise to free up the memory that is holding the parser. This is done by calling the xml_parser_free() function as follows :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 xml_parser_free(XML_PARSER);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;?&lt;br /&gt;
 # --- Element Functions ---&lt;br /&gt;
 &lt;br /&gt;
 function startElement($parser, $name, $attributes){&lt;br /&gt;
    # ... some code&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function endElement ($parser, $name){&lt;br /&gt;
    # ... some code&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function characterData ($parser, $data){&lt;br /&gt;
    # ... some code&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function load_data($file){&lt;br /&gt;
    $f = fopen ($file, &#039;r&#039;);&lt;br /&gt;
    $data = fread($f, filesize($file));&lt;br /&gt;
    return $data;&lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 # --- Main Program Body ---&lt;br /&gt;
 $file = &amp;quot;simple.xml&amp;quot;;&lt;br /&gt;
 $parser = xml_parser_create();&lt;br /&gt;
 xml_set_element_handler($parser, &amp;quot;startElement&amp;quot;, &amp;quot;endElement&amp;quot;);&lt;br /&gt;
 xml_set_character_data_handler($parser, &amp;quot;characterData&amp;quot;);&lt;br /&gt;
 xml_parse ($parser, load_data($file));&lt;br /&gt;
 xml_parser_free($parser);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parsing XML Documents ==&lt;br /&gt;
&lt;br /&gt;
We have seen the steps needed to successfully parse a XML document with PHP. Lets take a moment to reflect on how these steps are interconnected.&lt;br /&gt;
&lt;br /&gt;
When a XML parser is initialized, php will go through the XML file. When a starting tag is found, a predefined function created by you, the programmer, is called. The same thing happens when php encounters the text between tags, and the end tags.&lt;br /&gt;
&lt;br /&gt;
Here is a complete example of parsing XML documents. This example is a RSS reader which can be used to display News Articles from any RSS feed which conforms to RSS 1.0 standards.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; Google Articles &amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;amp;lt;h2&amp;gt;Google Articles&amp;amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;amp;lt;dl&amp;gt;&lt;br /&gt;
 &amp;lt;?php &lt;br /&gt;
 &lt;br /&gt;
 $insideitem = false;&lt;br /&gt;
 $tag = &amp;quot;&amp;quot;;&lt;br /&gt;
 $title = &amp;quot;&amp;quot;;&lt;br /&gt;
 $description = &amp;quot;&amp;quot;;&lt;br /&gt;
 $link = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 function startElement($parser, $name, $attrs) {&lt;br /&gt;
         global $insideitem, $tag, $title, $description, $link; &lt;br /&gt;
         if ($insideitem) {&lt;br /&gt;
                 $tag = $name;&lt;br /&gt;
         }&lt;br /&gt;
         elseif ($name == &amp;quot;ITEM&amp;quot;) {&lt;br /&gt;
                 $insideitem = true;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function endElement($parser, $name) {&lt;br /&gt;
         global $insideitem, $tag, $title, $description, $link;&lt;br /&gt;
         if ($name == &amp;quot;ITEM&amp;quot;) {&lt;br /&gt;
                 printf(&amp;quot;&amp;amp;lt;dt&amp;gt;&amp;amp;lt;b&amp;gt;&amp;lt;a href=&#039;%s&#039;&amp;gt;%s&amp;lt;/a&amp;gt;&amp;amp;lt;/b&amp;gt;&amp;amp;lt;/dt&amp;gt;&amp;quot;,&lt;br /&gt;
                 trim($link),trim($title));&lt;br /&gt;
                 printf(&amp;quot;&amp;amp;lt;dd&amp;gt;%s&amp;amp;lt;/dd&amp;gt;&amp;quot;, trim($description));&lt;br /&gt;
                 $title = &amp;quot;&amp;quot;;&lt;br /&gt;
                 $description = &amp;quot;&amp;quot;;&lt;br /&gt;
                 $link = &amp;quot;&amp;quot;;&lt;br /&gt;
                 $insideitem = false;&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function characterData($parser, $data) {&lt;br /&gt;
        global $insideitem, $tag, $title, $description, $link;&lt;br /&gt;
         if ($insideitem) {&lt;br /&gt;
                 switch ($tag) {&lt;br /&gt;
                         case &amp;quot;TITLE&amp;quot;:&lt;br /&gt;
                                 $title .= $data;&lt;br /&gt;
                                 break;&lt;br /&gt;
                         case &amp;quot;DESCRIPTION&amp;quot;:&lt;br /&gt;
                                 $description .= $data;&lt;br /&gt;
                                 break;&lt;br /&gt;
                         case &amp;quot;LINK&amp;quot;:&lt;br /&gt;
                                 $link .= $data;&lt;br /&gt;
                                 break;&lt;br /&gt;
                 }&lt;br /&gt;
         }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $xml_parser = xml_parser_create();&lt;br /&gt;
 xml_set_element_handler($xml_parser, &amp;quot;startElement&amp;quot;, &amp;quot;endElement&amp;quot;);&lt;br /&gt;
 xml_set_character_data_handler($xml_parser, &amp;quot;characterData&amp;quot;);&lt;br /&gt;
 # $fp = fopen(&amp;quot;http://www.newsforge.com/index.rss&amp;quot;, &#039;r&#039;)&lt;br /&gt;
 $fp = fopen(&amp;quot;http://news.google.co.za/nwshp?hl=en&amp;amp;tab=wn&amp;amp;q=&amp;amp;output=rss&amp;quot;, &#039;r&#039;)&lt;br /&gt;
         or die(&amp;quot;Error reading RSS data.&amp;quot;);&lt;br /&gt;
 while ($data = fread($fp, 4096)) {&lt;br /&gt;
         xml_parse($xml_parser, $data, feof($fp))&lt;br /&gt;
        or die(sprintf(&amp;quot;XML error: %s at line %d&amp;quot;,&lt;br /&gt;
        xml_error_string(xml_get_error_code($xml_parser)),&lt;br /&gt;
         xml_get_current_line_number($xml_parser)));&lt;br /&gt;
 }&lt;br /&gt;
 fclose($fp);&lt;br /&gt;
 xml_parser_free($xml_parser);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
 &amp;amp;lt;/dl&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dumping Database Contents into an XML File ==&lt;br /&gt;
&lt;br /&gt;
[[../Common Functions and Operators/|Previous: Common Functions and Operators]] | [[../|TOC]]&lt;br /&gt;
&lt;br /&gt;
[[Category:PHP and MySQL Programming|{{SUBPAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>72.54.177.34</name></author>
	</entry>
</feed>