2009-06-26 7 views
1

Hey, also stelle ich einen Versandrechner mit this function bereit, und ich bekomme diesen Fehler nur, wenn ich IE benutze. Firefox ist mit dem Versandrechner gut. Ich bin mit diesem Fehler nicht vertraut, und Google-Suchen sagen mir, dass es ein Problem mit dem XML-Format ist. Problem: Die XML-Antwort von UPS Versandberechnungsserver sollte diesen Inhalt nicht enthalten. Also, meine Frage ist: wo denkst du, der Bug ist? Ich schätze Antworten und Vorschläge, wo Sie nachsehen können. Ich zeichne eine leere.php, xml, ups Versand: "Kann XML-Eingabe nicht mit XSL anzeigen ..." Wo ist der Fehler?

Fehler beim IE (vrs 8. 7 und 6):

Die XML-Seite kann nicht angezeigt werden nicht XML-Eingabe anzeigen können XSL-Style Blatt verwenden. Bitte korrigieren Sie den Fehler und dann klicken Sie auf die Schaltfläche Aktualisieren, oder versuchen Sie es später erneut .


falsche Syntax wurde in einem Kommentar verwendet. Fehler bei der Verarbeitung Ressource 'http://mgxvideo.com/mgxcopy-alpha-3/shopping/cart_displa ...

<!------------------- main content -------------------------> 

----------^

Teil des PHP-Code vom Server angefordert:

$ch = curl_init("https://www.ups.com/ups.app/xml/Rate"); 
     curl_setopt($ch, CURLOPT_HEADER, 1); 
     curl_setopt($ch,CURLOPT_POST,1); 
     curl_setopt($ch,CURLOPT_TIMEOUT, 90); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     curl_setopt($ch,CURLOPT_POSTFIELDS,$data); 
     $result=curl_exec ($ch); 
    echo '<!-- '. $result. ' -->'; // THIS LINE IS FOR DEBUG PURPOSES ONLY-IT WILL SHOW IN HTML COMMENTS 
     $data = strstr($result, '<?'); 
     $xml_parser = xml_parser_create(); 
     xml_parse_into_struct($xml_parser, $data, $vals, $index); 
     xml_parser_free($xml_parser); 
     $params = array(); 
     $level = array(); 
     foreach ($vals as $xml_elem) { 
     if ($xml_elem['type'] == 'open') { 
     if (array_key_exists('attributes',$xml_elem)) { 
      list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']); 
     } else { 
      $level[$xml_elem['level']] = $xml_elem['tag']; 
     } 
     } 
     if ($xml_elem['type'] == 'complete') { 
     $start_level = 1; 
     $php_stmt = '$params'; 
     while($start_level < $xml_elem['level']) { 
      $php_stmt .= '[$level['.$start_level.']]'; 
      $start_level++; 
     } 
     $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];'; 
     eval($php_stmt); 
     } 
     } 
     curl_close($ch); 
     #print_r($params); 
     #echo "<br/><br/>"; 
     return $params['RATINGSERVICESELECTIONRESPONSE']['RATEDSHIPMENT']['TOTALCHARGES']['MONETARYVALUE']; 

Und hier ist, was Firefox als Ergebnis der xml-Anfrage widerspiegelt (im obigen Code ist es die Zeile, die besagt: "DIESE LINIE IST NUR FÜR DEBUG-ZWECKE":

<!-- HTTP/1.1 100 Continue 

HTTP/1.1 200 OK 
Date: Fri, 26 Jun 2009 21:58:04 GMT 
Server: Apache 
Pragma: no-cache 
Content-Length: 1524 
Content-Type: application/xml 

<?xml version="1.0"?><RatingServiceSelectionResponse><Response><TransactionReference><CustomerContext>Bare Bones Rate Request</CustomerContext><XpciVersion>1.0</XpciVersion></TransactionReference><ResponseStatusCode>1</ResponseStatusCode><ResponseStatusDescription>Success</ResponseStatusDescription></Response><RatedShipment><Service><Code>02</Code></Service><RatedShipmentWarning>Your invoice may vary from the displayed reference rates</RatedShipmentWarning><BillingWeight><UnitOfMeasurement><Code>LBS</Code></UnitOfMeasurement><Weight>6.0</Weight></BillingWeight><TransportationCharges><CurrencyCode>USD</CurrencyCode><MonetaryValue>14.34</MonetaryValue></TransportationCharges><ServiceOptionsCharges><CurrencyCode>USD</CurrencyCode><MonetaryValue>0.00</MonetaryValue></ServiceOptionsCharges><TotalCharges><CurrencyCode>USD</CurrencyCode><MonetaryValue>14.34</MonetaryValue></TotalCharges><GuaranteedDaysToDelivery>2</GuaranteedDaysToDelivery><ScheduledDeliveryTime></ScheduledDeliveryTime><RatedPackage><TransportationCharges><CurrencyCode>USD</CurrencyCode><MonetaryValue>14.34</MonetaryValue></TransportationCharges><ServiceOptionsCharges><CurrencyCode>USD</CurrencyCode><MonetaryValue>0.00</MonetaryValue></ServiceOptionsCharges><TotalCharges><CurrencyCode>USD</CurrencyCode><MonetaryValue>14.34</MonetaryValue></TotalCharges><Weight>6.0</Weight><BillingWeight><UnitOfMeasurement><Code>LBS</Code></UnitOfMeasurement><Weight>6.0</Weight></BillingWeight></RatedPackage></RatedShipment></RatingServiceSelectionResponse> --> 

Ideen?

+0

So stellt sich heraus, es war die Seite, dass es ein Problem mit Kommentaren ist, die nicht richtig gemacht werden. ist anscheinend in gewisser Weise nur für zB illegal. Jetzt ist mein Problem, dass die Seite den HTML-Code eher das gerenderte HTML anzeigt. – montooner

+0

Keine Notwendigkeit, "[gelöst]" zum Titel hinzuzufügen, akzeptieren Sie einfach eine Antwort, indem Sie auf das umrissene Häkchen einer Antwort klicken (kann sogar Ihre eigene Antwort sein). – VolkerK

Antwort

4

Technisch gesehen können Sie innerhalb von XML-Kommentaren kein '-' haben. So sollten Sie ändern:

<!------------------- main content -------------------------> 

zu

<!--     main content      --> 

... oder etwas ähnliches. Wenn UPS es sendet. Sie können es ersetzen, bevor Sie es an den Browser weiterleiten.

EDIT

In Bezug auf die Markup-Anzeigen eher als HTML gerendert: Wenn Sie das gleiche wie in Firefox zu sehen (< RatingServiceSelectionResponse, etc.) das ist nicht HTML - es XML ist. Entweder möchten Sie es mit XSLT transformieren oder XPath (oder XQuery usw.) verwenden, um bestimmte Werte daraus zu holen. Sieht so aus, als könnten Sie auch die Funktion $ myRate-> getRate() von der ups-php-API verwenden, auf die Sie verwiesen haben.

+0

srsly? Danke für den Kommentar. Das gerenderte HTML scheint ie8's Methode zu sein, Syntaxfehler im HTML zu bestrafen. Es rendert den gesamten Code, bis Sie einen Syntaxfehler erreichen, wo er ihn hervorhebt und sagt: "div tag stimmt nicht mit dem öffnenden br Tag überein". dieser besondere Fehler wurde verzögert. wtf br Tags sind nicht abgestimmt, weißt du? – montooner

1

das Problem war schlechte HTML-Formatierung. Ich habe alle meine Kommentare gelöscht, und aus irgendeinem Grund funktioniert es jetzt besser.