#native_company# #native_desc#
#native_cta#

Postgres recordset to XML

By Marshall McCain
on May 8, 2001

Version: 1.0

Type: Function

Category: Databases

License: GNU General Public License

Description: This function translates a Postgres Query Result into an XML DOM object. Please check requirements for using this function.

<?
	//------------------------------------------------------------------------------------------------------------------
	// Description: This function handles postgres->xml data
	//				transformations.
	// Author:  Cody McCain ([email protected])
	// License: GNU Public
	// Last Updated: 5/7/2001
	//
	// Requirements:	To use XML/XSLT with PHP you must have DOM XML
	//					(libxml-2.2.7) [www.xmlsoft.org],
	//					Sablot [www.gingerall.com] (or another xsl parser)
	//					compiled into PHP.
	//
	//					This function does not require Sablot, but I encourage
	//					you to use XSLT stylesheets as this separates content
	//					from data (very important in multi-tier environment).
	//
	// Abstract:	I am constantly transforming recordsets (SQL Query Results)
	//				so I can provide the appropriate data for my XSL stylesheets.
	//				This function takes a postgres query result and converts it
	//				to an XML DOM object.
	//
	// usage example:
	//       $error = recordset_to_xml_ext ( $result, "items", "item", 
	//					array ("field1", "field2"), $xmldoc );
	//
	// The xml document will be assigned to $xmldoc.
	//
	// You can convert select fields of the recordset to
	// attributes instead of children of the respective row
	// by including it in the attribute array.
	//
	//------------------------------------------------------------------------------------------------------------------
	
	
	function recordset_to_xml_ext ( $result_query, $collection, $entry, $attributes, &$xmldoc )
	{
		// Make sure we have a valid  result from our query
		// Check PostgreSQL functions for details on how to make database queries.
		
		if( !$result_query )
		{
			trigger_error( "The query result passed was invalid.  Please check the SQL Query." );
			return 1;
		}

		$fieldnum = pg_numfields( $result_query );
		$rownum = pg_numrows( $result_query );

		// Create array that lists all of our fields

		for( $i=0; $i < $fieldnum; $i++ )
		{
			$fieldnames[] = pg_fieldname( $result_query, $i );
		}
		
		// Create new XML Document

		$xmldoc = domxml_new_xmldoc("1.0");

		if( strlen( $collection ) == 0 )
		{
			trigger_error( "Collection (root of xml) label cannot be null." );
			return 1;
		}

		if( strlen( $entry ) == 0 )
		{
			trigger_error( "Entry (children of root in xml) label cannot be null." );
			return 1;
		}

		// Here's where we add all the recordset to the xml document.

		$xmlroot = $xmldoc->add_root( $collection );

		for( $i=0; $i < $rownum; $i++ )
		{
			$row = pg_fetch_row( $result_query, $i );
			$xmlentry = $xmlroot->new_child( $entry, "" );
			for( $j=0; $j < $fieldnum; $j++ )
			{
				if( in_array( $fieldnames[$j], $attributes, false ) )
				{
					$xmlentry->set_attribute( $fieldnames[$j], $row[$j] );
				}
				else
				{
					$xmlentry->new_child( $fieldnames[$j], $row[$j] );
				}
			}
		}

		return 0;

	}
?>