Tôi phải đọc một số tệp XML khá nặng (từ 200 MB đến 1 GB), đối với một số tệp không hợp lệ. Để tôi cho bạn một ví dụ nhỏ:PHP - Đọc và sửa chữa các tệp XML không hợp lệ lớn
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<item>
<title>Some article</title>
<g:material><ul><li>50 % Coton</li><li>50% Lyocell</li></g:material>
</item>
</rss>
Rõ ràng, có một thiếu </ul>
thẻ đóng trong thẻ g:material
. Hơn nữa, những người đã phát triển nguồn cấp dữ liệu này nên có kèm theo g:material
nội dung vào CDATA
, mà họ không ... Về cơ bản, đó là những gì tôi muốn làm: thêm phần thiếu CDATA
này.
Tôi đã cố gắng sử dụng trình phân tích SAX để đọc tệp này nhưng không thành công khi đọc thẻ </g:material>
do thiếu thẻ </ul>
. Tôi đã thử với XMLReader nhưng về cơ bản là cùng một vấn đề. Tôi có thể làm điều gì đó với DomDocument :: loadHtml nhưng kích thước của tệp này không thực sự tương thích với cách tiếp cận DOM. Bạn có bất kỳ ý tưởng làm thế nào tôi chỉ có thể sửa chữa thức ăn này mà không cần phải mua rất nhiều RAM cho DomDocument để làm việc? Cảm ơn.
có họ nên làm điều đó. bạn luôn có thể thử regexp tìm/thay thế tất cả các tệp của bạn nếu bạn biết nơi có vấn đề. nhưng nó không phải là mối quan tâm của bạn ngay từ đầu. – mpm
Hey Rémi, bạn không thể đọc chuỗi, do đó thêm các phần CDATA, trước khi bạn đẩy nó vào bộ tải xml của bạn? – brisssou
Vâng, đó là những gì tôi đã suy nghĩ và những gì tôi đang làm ngay bây giờ nhưng tôi vẫn hy vọng có suy nghĩ tốt hơn để làm hơn đọc ký tự XML theo ký tự hoặc tìm/thay thế bằng regexp :) – Remi