2009-01-13 36 views
8

Tôi có một trang web hướng PHP bao gồm nguồn cấp dữ liệu XML, được phân phát từ xa từ ASP (tức là url nguồn cấp dữ liệu XML theo thứ tự: http://remote.com/client.asp).Kiểm tra xem tệp từ xa có phải là XML được định dạng tốt với PHP

Vì nguồn cấp dữ liệu thường không có sẵn (theo đó tôi có nghĩa là trang web trả về lỗi ASP), tôi muốn kiểm tra xem nguồn cấp dữ liệu có phải là XML được định dạng tốt hay không trước khi đưa nó vào. Chức năng url_exists thông thường của tôi không thực hiện thủ thuật vì tất nhiên URL tồn tại ngay cả khi 'lỗi'.

TIA.

+1

Lưu ý: hãy cẩn thận với thuật ngữ. Bạn đang mô tả những âm thanh như XML "được hình thành tốt", có nghĩa là một cái gì đó khác với XML "hợp lệ". – cletus

+0

Hoàn toàn chỉnh sửa (nhờ) chỉnh sửa ngay bây giờ ... – da5id

Trả lời

21

Sử dụng cURL để nhận kết quả và simplexml để kiểm tra xem XML có phải là well-formed hay không.

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "http://remote.com/client.asp"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($curl); 
curl_close($curl); 
if (simplexml_load_string($output)) { 
    // well-formed XML 
} else { 
    // it isn't 
} 
+0

Cảm ơn. Tôi đã sử dụng một cái gì đó rất giống với đó, và nó là kịch bản này thường ném một lỗi. Mặc dù tôi đang sử dụng simplexml_load_file, sẽ có sự khác biệt với simplexml_load_string không? – da5id

+0

Rõ ràng như vậy là tất cả bây giờ là tốt. Cảm ơn một lần nữa, đánh dấu câu trả lời là được chấp nhận. – da5id

+0

Tôi đang gặp sự cố với SimpleXML và nó rất lạ. Rõ ràng simplexml_load_file() từ URL và simplexml_load_string() từ kết quả cURL của URL có thể nhận được kết quả khác nhau. Người ta có thể thất bại trong khi người khác có thể làm việc ... Nó vượt ra ngoài tôi như thế nào đã xảy ra. Hãy xem hàm cURL của tôi ngay bây giờ – fred

Các vấn đề liên quan