Tôi có một quá trình phân tích một file XML sử dụng JDOM và xpath để phân tích các tập tin như hình dưới đây:Parsing bị thay đổi/không đầy đủ/file XML không hợp lệ
private static SAXBuilder builder = null;
private static Document doc = null;
private static XPath xpathInstance = null;
builder = new SAXBuilder();
Text list = null;
try {
doc = builder.build(new StringReader(xmldocument));
} catch (JDOMException e) {
throw new Exception(e);
}
try {
xpathInstance = XPath.newInstance("//book[author='Neal Stephenson']/title/text()");
list = (Text) xpathInstance.selectSingleNode(doc);
} catch (JDOMException e) {
throw new Exception(e);
}
Trên đây hoạt động tốt. Các biểu thức xpath được lưu trữ trong một tệp thuộc tính để chúng có thể được thay đổi bất cứ lúc nào. Bây giờ tôi phải xử lý một số tệp xml khác đến từ hệ thống kế thừa sẽ chỉ gửi các tệp xml theo khối 4000 byte. Việc xử lý hiện có đọc các khối 4000 byte và lưu trữ chúng trong một cơ sở dữ liệu Oracle với mỗi đoạn như một hàng trong cơ sở dữ liệu (Thực hiện bất kỳ thay đổi nào đối với hệ thống kế thừa hoặc xử lý lưu trữ các khối như các hàng trong cơ sở dữ liệu nằm ngoài câu hỏi) .
Tôi có thể tạo tài liệu XML hợp lệ hoàn chỉnh bằng cách trích xuất tất cả các hàng liên quan đến tài liệu xml cụ thể và hợp nhất chúng và sau đó sử dụng xử lý hiện có (được hiển thị ở trên) để phân tích cú pháp tài liệu xml.
Vấn đề là dữ liệu tôi cần trích xuất từ tài liệu XML sẽ luôn nằm trong 4000 byte đầu tiên. Tài liệu này không phải là tài liệu XML hợp lệ vì nó sẽ không đầy đủ nhưng sẽ chứa tất cả dữ liệu tôi cần. Tôi không thể phân tích cú pháp chỉ một đoạn như người xây dựng JDOM sẽ từ chối nó.
Tôi tự hỏi liệu tôi có thể phân tích cú pháp đoạn XML không đúng định dạng mà không phải hợp nhất tất cả các phần (có thể nhận được khá nhiều) để lấy một tài liệu XML hợp lệ. Điều này sẽ tiết kiệm cho tôi một số chuyến đi đến cơ sở dữ liệu để kiểm tra xem một đoạn có sẵn và tôi sẽ không phải kết hợp 100s của khối chỉ để có thể sử dụng 4000 byte đầu tiên.
Tôi biết tôi có thể sử dụng các hàm chuỗi của java để trích xuất dữ liệu có liên quan nhưng điều này có thể sử dụng trình phân tích cú pháp hoặc thậm chí là xpath không? hoặc cả hai đều mong đợi tài liệu xml là một tài liệu được định dạng tốt trước khi nó có thể phân tích nó?
Cảm ơn - Tôi nghĩ rằng đây là cụ thể cho tài liệu HTML. Tôi không làm việc với HTML. – ziggy
@ziggy: Hãy thử phân tích cú pháp() một lần thử! Xem cập nhật của tôi. – Vlad
aha .. thật thú vị. Tôi sẽ kiểm tra nó. Cảm ơn – ziggy