> -----Original Message----- > you could easily just print the xml manually. > > <dvd> > <titleID>foo</titleID> > <bar>etc</bar> > </dvd> > > or, i believe mysql will return XML output but i'm not sure a PHP > function exists to do that. > > no need to use fancy DOM functions, outputting XML is easy, parsing it > is when you need to use the special functions and such. Here's the 'functions_xml.inc.php' file I use, it has served me well and handles I believe all tag cases, personally I'm a big fan of using the attributes as they're most easily parsed out in the PHP DOM functions: --------------------------------8<-------------------------------------- --- <?php /** * Aborts XML output with an Error message * * @return string xml formatted tags and data * @param string $message the error message to output * @version 1.3 * @date 07/14/05 */ function XML_exit($message) { header( "Content-type: text/xml" ); print "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"; //TODO: [dv] we should probably put an error code so that it's easier for the scripts to parse //print xmltag('error', array('code'=>'TBD', 'string'=>$message)); print xmltag('error',null, 1); print xmltag('code','TBD'); print xmltag('string',$message); print xmltag('error',null, 2); exit; } /** * Returns a well formed lowercase XML tag string suitable for printing to screen * * tagType=1: is like tagType=3, but without the /> * tagType=2: is the closing </xmltag> only. * * tagType=3: * <xmltag foo=bar /> * * also note that array('foo'=>'bar','__VALUE'='1234') will generate: * <xmltag foo=bar>1234</xmltag> * * tagType=4: * <xmltag> * <foo>bar</foo> * </xmltag> * * @return string xml formatted tags and data * @param string $xmltag is the tag name to surround * @param mixed $data data to output between the tags, if $data is an array, it will be expanded as KEY=VALUE in the tag. If there is an array element __VALUE that will be a value between XML tags after the list of attributes * @param int $tagType 1=start tag only, 2=end tag only, 3=default, 4=verbose tag * @todo use recursion to get nested arrays working, especially for tagType=4 * @version 1.6 * @date 01/16/06 */ function xmltag($xmltag, $data, $tagType = 3) { // convert spaces to underscores and makes it lowercase as per XML specification $xmltag = strtolower(str_replace(' ','_', $xmltag )); // encode all characters that need to be converted for export into XML $data = xmlentities($data); //we put this first, as it is used most frequently if ($tagType == 3) { if (isset($data)) { if (is_array($data)) { if (isset($data['__VALUE'])) { $value_data = $data['__VALUE']; unset($data['__VALUE']); } $tmp = '<'.$xmltag; foreach($data as $key => $value) { if ( is_bool($value) ) $value = ($value === true)?'true':'false'; $tmp .= ' '.$key.'="'.$value.'"'; } if (isset($value_data)) { if ( is_bool($value_data) ) $value_data = ($value_data === true)?'true':'false'; $tmp .= ">".$value_data."</".$xmltag.">\r\n"; } else $tmp .= " />\r\n"; return $tmp; } else { if ( is_bool($data) ) $data = ($data === true)?'true':'false'; return '<'.$xmltag.'>'.$data.'</'.$xmltag.">\r\n"; } } else return '<'.$xmltag." />\r\n"; } //tag type 3 if ($tagType == 1) { $tmp = '<'.$xmltag; if (is_array($data)) { foreach($data as $key => $value) { if ( is_bool($value) ) $value = ($value === true)?'true':'false'; $tmp .= ' '.$key.'="'.$value.'"'; } } $tmp .= ">\r\n"; return $tmp; } //tag type 1 if ($tagType == 2) return '</'.$xmltag.">\r\n"; if ($tagType == 4) { if (isset($data)) { if (is_array($data)) { $tmp = '<'.$xmltag.">\r\n"; foreach($data as $key => $value) { if ( is_bool($value) ) $value = ($value === true)?'true':'false'; $tmp .= '<'.$key.'>'.$value.'<'.$key."/>\r\n"; } $tmp = '</'.$xmltag.">\r\n"; return $tmp; } else { if ( is_bool($data) ) $data = ($data === true)?'true':'false'; return '<'.$xmltag.'>'.$data.'</'.$xmltag.">\r\n"; } } else return '<'.$xmltag." />\r\n"; } //tag type 4 } /** * Print out an array in XML form (useful for debugging) * @access public * @param string $myArray the array to output in XML format * @author Daevid Vincent [daevid@] * @version 1.0 * @date 07/19/05 * @todo It would be nice if we could extract the array's variable name and output that as an attribute */ function print_r_xml($myArray) { print xmltag('ARRAY', null, 1); foreach($myArray as $k => $v) { if (is_array($v)) print_r_xml($v); else print xmltag($k,htmlspecialchars($v)); } print xmltag('ARRAY', null, 2); } ?> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php