2010-03-02 11 views
11

parsowania pliku xml na Java pojawia się błąd:błąd o nieprawidłowych znaków XML w Javie

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

xml pochodzi z usługa.

Problem polega na tym, że błąd pojawia się tylko wtedy, gdy usługa sieciowa działa na localhost (windows + tomcat), ale nie wtedy, gdy usługa sieciowa jest w trybie online (linux + tomcat).

Jak wymienić nieprawidłowy znak ?? Dzięki.

Odpowiedz

7

stałe z tym kodem:

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, ale można go uprościć za pomocą 'dirtyXMLString.replaceAll (" [\\ 000] * "," ")'. – sp00m

+2

Może zostać przyspieszona również poprzez zmianę '*' na '+': 'dirtyXMLString.replaceAll (" [\\ 000] + "," ")' – Whitecat

4

To jest problem z kodowaniem. Albo odczytałeś go jako wejście UTF8 i nie jest on odwrotnie.

Powinieneś wyraźnie określać kodowanie podczas czytania treści. Na przykład. poprzez

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

Kolejnym problemem może być kocur. Spróbuj dodać URIEncoding = "UTF-8" w ustawieniach złącza tomcat w pliku server.xml. Ponieważ:

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 (!).

Zaczerpnięte z here.

+0

postaci jak ten http://www.fileformat.info/info/unicode/char/e4f8/index.htm zawiedzie podczas zapisywania do mysql. Czy istnieje ogólny sposób na znalezienie lub zignorowanie tych w java. Dodanie "UTF-8" nie pomaga. – titogeo

-1

Trochę rozglądania się ujawnia, że ​​0x0 jest znakiem zerowym, ktoś inny miał ten sam problem z XML i zerowymi znakami tutaj http://forums.sun.com/thread.jspa?threadID=579849. Nie wiem, jak analizować kod XML, ale jeśli najpierw otrzymasz go jako ciąg, jest kilka dyskusji na temat zastąpienia wartości null tutaj http://forums.sun.com/thread.jspa?threadID=628189.

+0

-1 Te linki wydają się już być martwe. Właśnie dlatego odradzamy udzielanie tylko linków. –

11

Znak Unicode 0x0 oznacza NULL, co oznacza, że ​​dane, które wyciągasz, zawierają gdzieś NULL (co nie jest dozwolone w XML i stąd Twój błąd).

Upewnij się, że wiesz, co powoduje NULL w pierwszej kolejności.

Również, w jaki sposób wchodzisz w interakcję z usługą WebService? Jeśli używasz osi, upewnij się, że WSDL ma określone kodowanie dla danych wejściowych i wyjściowych.

+2

+1 dla zdrowego rozsądku. Ślepe naprawianie takiego błędu bez dbania o to, skąd pochodzi, nie jest dobrym pomysłem. – Tomalak

Powiązane problemy