2010-01-30 13 views
9

Khi tôi cố gắng xác nhận hợp lệ tệp XML với XSD trong java (see this example), có một số không tương thích giữa các biểu thức chính quy được đưa ra trong tệp XSD và các biểu thức chính quy trong java.Làm thế nào để xử lý các phương ngữ khác nhau của các biểu thức chính quy (java so với xsd)?

Nếu có một biểu hiện thường xuyên như "[ab-]" trong XSD (có nghĩa là bất kỳ ký tự "a", "b" hoặc "-", java phàn nàn về lỗi cú pháp trong biểu thức

Đây là một. biết lỗi từ 28-MAR-2005, xem Sun bug database.

những gì tôi có thể làm để làm việc xung quanh lỗi này? đến nay tôi cố gắng "đúng" các tập tin XSD bằng cách thay thế "[ab-]" bởi "[ab\-]", nhưng đôi khi điều này không phải là một tùy chọn.


Nếu bạn gặp sự cố với lỗi này, vui lòng bỏ phiếu cho nó tại số Sun bug database!

+1

Vì vậy, bạn muốn một trình phân tích cú pháp * * để chuyển đổi mẫu * regex *? :) Tôi đã ít nhất upvoted lỗi cụ thể, có vẻ thực sự khá khó chịu. Hy vọng họ sẽ sửa nó sớm hơn. – BalusC

+0

Bộ chuyển đổi regex sẽ là một lựa chọn. Tôi chỉ đang tìm cách giải quyết tốt nhất. – tangens

Trả lời

3

Vì lỗi đã được đệ trình, tôi khuyên bạn nên thử một bộ xử lý Lược đồ XML khác. Sẽ không có nhiều thứ bạn có thể làm được.

Nếu bạn có thể tiền xử lý luồng, XSD sẽ bật, sau đó bạn có thể tạo trình phân tích cú pháp hiểu cấu trúc biểu thức chính quy cơ bản và có thể sửa bất kỳ nội dung nào có dạng [. * -] (trong đó .star là không phải là chữ trong trường hợp này).

0

Mặc dù nó có thể không phải là giải pháp tốt nhất trên thế giới, bạn có thể xem xét sử dụng trình phân tích cú pháp Sax. Tôi đã sử dụng nó trong hơn 3 năm nay, tuy nhiên tôi đã không thực hiện nhiều xác nhận regex với nó, vì vậy tôi không thể nói với nó là sự mạnh mẽ liên quan đến điều đó.

Ngoài ra, tôi nghĩ rằng Kaleb có lẽ là chính xác về phía tiền xử lý (đó là bất cứ điều gì nhưng lý tưởng) - bạn có thể sử dụng một regex cho bất kỳ regex đến để làm một thay thế .... mặc dù có khá nhiều mùi về nó.

Chỉnh sửa: Một ý nghĩ khác chỉ đến với tôi. Nếu regex không cần phải ở trong xsd - tức là nó đơn giản vì đó là "dễ nhất" trong quá khứ - bạn có thể thực hiện xác thực regex bên ngoài xsd. Nhưng, nếu các hệ thống khác sử dụng xsd, đó có thể không phải là giải pháp đúng, và bạn có thể quên tôi đã nói bất cứ điều gì.

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