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; } ?>