php,xml,ups الشحن:"لا يمكن عرض XML الإدخال باستخدام XSL..." أين الخلل ؟

StackOverflow https://stackoverflow.com/questions/1051492

سؤال

أنا نشر الشحن باستخدام آلة حاسبة هذه الوظيفة, و أنا على الحصول على هذا الخطأ فقط عند استخدام أي.فايرفوكس يتعامل بشكل جيد مع آلة حاسبة الشحن.أنا غير مألوف مع هذا الخطأ و البحث جوجل تقول لي أنه يوجد مشكلة في تنسيق xml.المشكلة هي:استجابة XML من UPS الشحن حساب الخادم لا يجب أن يكون هذا المحتوى. لذا سؤالي هو:تعتقد أين الخلل ؟ أنا أقدر الإجابات والاقتراحات من حيث للتحقق. أنا رسم فارغة.

خطأ عند استخدام أي (vrs 8.7 ، 6):

XML لا يمكن عرض الصفحة لا يمكن عرض XML الإدخال باستخدام نمط XSL ورقة.يرجى تصحيح الخطأ ثم انقر فوق الزر تحديث أو حاول مرة أخرى في وقت لاحق.


بناء جملة غير صحيح في التعليق.خطأ في معالجة الموارد 'http://mgxvideo.com/mgxcopy-alpha-3/shopping/cart_displa...

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

----------^

جزء من كود php طلب من الخادم:

$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'];

وهنا ما فايرفوكس أصداء نتيجة من طلب xml (في التعليمات البرمجية أعلاه ، هو السطر الذي يقول "هذا الخط هو التصحيح فقط":

<!-- 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> -->

أفكار ؟

هل كانت مفيدة؟

المحلول

تقنيا لا يمكن أن يكون '--' داخل XML التعليقات.لذلك يجب عليك تغيير:

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

إلى

<!--                  main content                     -->

...أو شيئا من هذا القبيل.إذا UPS إرساله.يمكنك استبدال ذلك قبل إحالتها إلى المتصفح.

تحرير

بخصوص عرض العلامات بدلا من المقدمة HTML:إذا كنت ترى نفس الشيء كما هو الحال في فايرفوكس (اما انك تريد تحويل ذلك مع XSLT أو استخدام XPath (أو XQuery ، إلخ.) جلب قيم معينة منه.يبدو أنك يمكن أيضا استخدام $myRate->getRate() وظيفة من ups-php API يمكنك الرجوع إليها.

نصائح أخرى

المسألة سوء تنسيق html.أنا حذفت كل تعليقاتي و لسبب انها تعمل بشكل أفضل الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top