2013-03-12 30 views
7

Tôi cần phải phân tích các tệp XML có kích thước 40GB và sau đó chuẩn hóa và chèn vào cơ sở dữ liệu MySQL. Bao nhiêu tệp tôi cần lưu trữ trong cơ sở dữ liệu không rõ ràng, tôi cũng không biết cấu trúc XML.Phân tích cú pháp các tệp XML cực lớn trong php

Tôi nên sử dụng trình phân tích cú pháp nào và bạn sẽ thực hiện việc này như thế nào?

+1

Đối với các file lớn, luôn luôn sử dụng một cú pháp kéo như XMLReader; chỉ cần thử tải 40GB tệp vào bộ nhớ cho SimpleXML. –

+1

từ các bài đăng có liên quan: http://stackoverflow.com/questions/911663/parsing-huge-xml-files-in-php?rq=1 – hexblot

+0

40 Gb? Ồ, tôi gặp sự cố với tệp xml 700 Mb trên máy mac os x. –

Trả lời

11

Trong PHP, bạn có thể đọc trong các tập tin XML lớn cực với XMLReaderDocs:

$reader = new XMLReader(); 
$reader->open($xmlfile); 

cực file XML lớn nên được lưu trữ trong một định dạng nén trên đĩa. Ít nhất điều này có ý nghĩa vì các tệp XML có tỷ lệ nén cao. Ví dụ: gzipped như large.xml.gz.

PHP hỗ trợ đó khá tốt với XMLReader qua compression wrappersDocs:

$xmlfile = 'compress.zlib://path/to/large.xml.gz'; 

$reader = new XMLReader(); 
$reader->open($xmlfile); 

Các XMLReader cho phép bạn để hoạt động trên các yếu tố hiện tại "chỉ". Điều đó có nghĩa là nó chỉ chuyển tiếp. Nếu bạn cần giữ trạng thái phân tích cú pháp, bạn cần phải xây dựng nó cho riêng mình.

Tôi thường thấy hữu ích khi quấn các chuyển động cơ bản vào một tập hợp các trình lặp mà biết cách vận hành trên XMLReader như chỉ lặp qua các phần tử hoặc phần tử con. Bạn tìm thấy điều này được nêu trong Parse XML with PHP and XMLReader.

Xem cũng như:

2

Thật tuyệt khi biết bạn thực sự muốn làm gì với XML. Cách bạn phân tích nó phụ thuộc rất nhiều vào việc xử lý bạn cần phải thực hiện, cũng như kích thước.

Nếu đây là nhiệm vụ một lần, thì tôi đã bắt đầu trong quá khứ bằng cách khám phá cấu trúc XML trước khi thực hiện bất kỳ điều gì khác. DTDGenerator của tôi (xem saxon.sf.net) được viết cho mục đích này một thời gian dài trước đây và vẫn còn công việc, có những công cụ khác hiện có nhưng tôi không biết liệu họ có xử lý luồng mà là điều kiện tiên quyết ở đây không.

Bạn có thể viết một ứng dụng xử lý dữ liệu bằng cách sử dụng trình phân tích cú pháp kéo hoặc đẩy (SAX hoặc StAX). Làm thế nào dễ dàng này là phụ thuộc vào bao nhiêu chế biến bạn phải làm và bao nhiêu nhà nước bạn phải duy trì, mà bạn đã không nói với chúng tôi. Ngoài ra, bạn có thể thử xử lý XSLT được truyền trực tuyến, có sẵn trong Saxon-EE.