Steve,
Did you take a look at the raw data returned by the fsockopen file pointer.
There may be some http headers that are tripping up the xml parser.
-----Original Message-----
From: Steve Haemelinck [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, February 13, 2001 12:07 PM
To: PHP Mailing Listl (E-mail)
Subject: [PHP] XML Parsing through Proxy
Hi Anybody got an idea?
I am sitting behind a proxy and I want to able to parse an XML.
So I have to use fsockopen() to get through my firewall and get the page.
So far, everything goes wel, but I am not able to parse the file, because I
think it is not in XML format if I use "GET http://.... "
Does anyone has an idea how I can solve this?
My code so far (bits and pieces of anywhere :) )
Steve
<?php
#########################################################
# Parse XML through Proxy #
#########################################################
// Define Variables
# Proxy Settings
$proxy_ip="proxy.server.be";
$proxy_port=8080;
# XML Mapping
$map_array = array(
"NASDAQAMEX-DOT-COM" => "HEADER_TAG",
"ISSUE-NAME" => "STOCK_NAME",
"LAST-SALE-PRICE" => "LAST_SALE",
"PREVIOUS-CLOSE-PRICE" => "PREVIOUS_SALE",
"NET-CHANGE-PRICE" => "CHANGE",
"NET-CHANGE-PCT" => "CHANGE_PCT",
"TODAYS-HIGH-PRICE" => "TODAYS_HIGH",
"TODAYS-LOW-PRICE" => "TODAYS_LOW",
);
# XML File to Parse
$xmlFile_Location="http://quotes.nasdaq.com/quote.dll?page=xml&mode=stock&sy
mbol=NETA";
// Functions
# StartElement Of Parser
function startElement($parser, $name, $attrs=''){
global $map_array, $temp, $current_tag;
$current_tag = $name;
if ($format = $map_array[$name]){
switch($name){
case 'NASDAQAMEX-DOT-COM':
//echo $HTTP_GET_VARS['ticker'];
break;
default:
break;
}
}
}
# EndElement Of Parser
function endElement($parser, $name, $attrs=''){
global $map_array, $temp, $current_tag;
if ($format = $map_array[$name]){
switch($name){
case 'NASDAQAMEX-DOT-COM':
return_page($temp);
$temp = '';
break;
default:
break;
}
}
}
# Process the Data between XML-Tags
function characterData($parser, $data){
global $current_tag, $temp, $catID;
switch($current_tag){
case 'ISSUE-NAME':
$temp['STOCK_NAME'] = $data;
$current_tag = '';
break;
case 'LAST-SALE-PRICE':
$temp['LAST_SALE'] = $data;
$current_tag = '';
break;
default:
break;
}
}
# Create the XML Parser and set options
$type="UTF-8";
$xml_parser = xml_parser_create($type);
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, 'startElement','endElement');
xml_set_character_data_handler($xml_parser, 'characterData');
/* Open a connection through Proxy with Nasdaq and start parsing */
$sockPointer = fsockopen($proxy_ip,$proxy_port, $errNo, $errStr,30);
//Connect to Proxy
if( !$sockPointer ){
echo "$errStr Proxy not Available \n\n";
exit();
}
else{
fputs($sockPointer,"GET $xmlFile_Location/ <?xml version=\"1.0\"
?>\n\n");
while (!feof($sockPointer)){
$Data = fgets($sockPointer, 100000);
$tag= "<?xml version=\"1.0\" ?>\n\n";
if( eregi("xml version",$Data) ){
$Parse=1;
}
if($Parse==1){
if (!($Data = utf8_encode($Data))){
echo 'ERROR'."\n";
}
if (!xml_parse($xml_parser, $Data, feof($sockPointer))){
die(sprintf( "XML error: %s at line %d\n\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
}
fclose($sockPointer);
}
xml_parser_free($xml_parser);
?>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]