Tất cả phụ thuộc vào mức độ lớn của đơn vị công việc, nhưng tôi đoán bạn đang cố gắng xử lý từng <product/>
nút liên tiếp.
Đối với điều đó, cách đơn giản nhất là sử dụng XMLReader để truy cập từng nút, sau đó sử dụng SimpleXML để truy cập chúng. Bằng cách này, bạn giữ cho việc sử dụng bộ nhớ ở mức thấp vì bạn đang xử lý một nút tại một thời điểm và bạn vẫn tận dụng được tính dễ sử dụng của SimpleXML. Ví dụ:
$z = new XMLReader;
$z->open('data.xml');
$doc = new DOMDocument;
while ($z->read() && $z->name !== 'product');
while ($z->name === 'product')
{
$node = simplexml_import_dom($doc->importNode($z->expand(), true));
var_dump($node->element_1);
$z->next('product');
}
Tổng quan nhanh về ưu và nhược điểm của các cách tiếp cận khác nhau:
Chỉ XMLReader
Ưu điểm: nhanh, sử dụng ít bộ nhớ
Nhược điểm: quá khó để viết và gỡ lỗi, yêu cầu nhiều mã vùng người dùng để làm bất cứ điều gì hữu ích. Mã userland chậm và dễ bị lỗi. Thêm vào đó, nó để lại cho bạn nhiều dòng mã hơn để duy trì
XMLReader + SimpleXML
Ưu điểm: không sử dụng nhiều bộ nhớ (chỉ bộ nhớ cần thiết để xử lý một nút) và SimpleXML, như tên của nó, thực sự dễ sử dụng.
Nhược điểm: tạo một đối tượng SimpleXMLElement cho mỗi nút không nhanh lắm. Bạn thực sự phải đánh giá nó để hiểu liệu đó có phải là vấn đề đối với bạn hay không. Mặc dù vậy, ngay cả một cỗ máy khiêm tốn cũng có thể xử lý một nghìn nút mỗi giây.
XMLReader + DOM
Ưu điểm: sử dụng nhiều bộ nhớ như SimpleXML và XMLReader :: expand () nhanh hơn việc tạo SimpleXMLElement mới. Tôi ước nó có thể sử dụng simplexml_import_dom()
nhưng nó dường như không hoạt động trong trường hợp đó
Nhược điểm: DOM gây khó chịu khi làm việc với. Nó nằm giữa XMLReader và SimpleXML. Không phức tạp và khó xử như XMLReader, nhưng sẽ mất vài năm nữa để làm việc với SimpleXML.
Lời khuyên của tôi: hãy viết một nguyên mẫu với SimpleXML, xem nó có phù hợp với bạn không. Nếu hiệu suất là tối quan trọng, hãy thử DOM. Tránh xa XMLReader nhất có thể. Hãy nhớ rằng bạn càng viết nhiều mã, khả năng bạn đưa ra lỗi hoặc giới thiệu hồi quy hiệu suất càng cao.