2010-03-02 41 views
11

Phân tích một file xml trên Java Tôi nhận được lỗi:Lỗi về nhân vật XML không hợp lệ trên Java

An invalid XML character (Unicode: 0x0) was found in the element content of the document.

Các xml xuất phát từ một webservice.

Vấn đề là tôi nhận được lỗi chỉ khi webservice đang chạy trên localhost (windows + tomcat), nhưng không phải khi webservice trực tuyến (linux + tomcat).

Làm cách nào để thay thế thẻ không hợp lệ? Cảm ơn.

Trả lời

7

cố định với mã này:

String cleanXMLString = null; 
Pattern pattern = null; 
Matcher matcher = null; 
pattern = Pattern.compile("[\\000]*"); 
matcher = pattern.matcher(dirtyXMLString); 
if (matcher.find()) { 
    cleanXMLString = matcher.replaceAll(""); 
} 
+3

+1, nhưng có thể được đơn giản hóa bởi 'dirtyXMLString.replaceAll (" [\\ 000] * "," ")' mặc dù. – sp00m

+2

Nó có thể được tăng tốc cũng bằng cách thay đổi '*' thành một '+': 'dirtyXMLString.replaceAll (" [\\ 000] + "," ")' – Whitecat

4

Đây là sự cố mã hóa. Hoặc bạn đọc nó ở đầu vào là UTF8 và nó không phải là hoặc theo cách khác.

Bạn nên chỉ định mã hóa rõ ràng khi bạn đọc nội dung. Ví dụ. qua

new InputStreamReader(getInputStream(), "UTF-8") 

Một vấn đề khác có thể là tomcat. Hãy thử thêm URIEncoding = "UTF-8" vào cài đặt trình kết nối của tomcat trong tệp server.xml. Bởi vì:

It turned out that the JSP specification says that if the page encoding of the JSP pages is not explicitely declared, then ISO-8859-1 should be used (!).

Lấy từ here.

+0

nhân vật như http://www.fileformat.info/info/unicode/char/e4f8/index.htm này không thành công trong khi tiết kiệm đến mysql. Có một cách chung chung để tìm hoặc bỏ qua những điều này trong java. Thêm "UTF-8" không giúp ích gì. – titogeo

-1

Một chút nhìn xung quanh cho thấy rằng 0x0 là một ký tự rỗng, một người khác có cùng vấn đề với các ký tự XML và null tại đây http://forums.sun.com/thread.jspa?threadID=579849. Không chắc chắn cách bạn phân tích cú pháp XML nhưng nếu bạn nhận được nó như là một chuỗi đầu tiên có một số discusion về làm thế nào để thay thế null ở đây http://forums.sun.com/thread.jspa?threadID=628189.

+0

-1 Các liên kết đó dường như đã chết. Đây là lý do tại sao các câu trả lời chỉ liên kết được khuyến khích. –

11

Ký tự Unicode 0x0 đại diện cho NULL có nghĩa là dữ liệu bạn đang kéo chứa NULL ở đâu đó (không được phép trong XML và do đó lỗi của bạn).

Đảm bảo rằng bạn tìm hiểu nguyên nhân gây ra NULL ở vị trí đầu tiên.

Ngoài ra, bạn tương tác với WebService như thế nào? Nếu bạn đang sử dụng Axis, hãy đảm bảo rằng WSDL có một số mã hóa được chỉ định cho dữ liệu vào và ra.

+2

+1 cho phương pháp tiếp cận thông thường. Sửa lỗi một lỗi như vậy mà không quan tâm đến nó đến từ đâu không phải là một ý tưởng hay. – Tomalak

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