2009-06-09 9 views
7

Viene visualizzata un'eccezione durante l'analisi dell'xml.È stato rilevato il carattere "& # x0" non valido

Fatal error at line -1 Invalid character '&#x0' encountered. No stack trace 

Ho dati Xml in formato stringa e sto analizzando utilizzando parser DOM. Sto analizzando i dati che sono una risposta dal server Java a un client Blackberry. Ho anche provato l'analisi con parser SAX, ma il problema non è stato risolto. Per favore aiuto.

+0

ci mostrano l'xml –

+0

valore valore valore valore XML è in formato stringa – iOSDev

risposta

4

ho ottenuto la soluzione,

Ho appena tagliati con finiture() e ha funzionato perfettamente bene con me.

+0

Sì, forse è perché il carattere "null" era alla fine della stringa. Ma penso che la vera solucion dovrebbe usare Replace del char "\ 0", e cambiarla per una stringa vuota. –

2

Gli odori come se si stesse tentando di analizzare una stringa vuota come XML. Hai verificato che al cliente viene data una buona risposta?

+0

Sì, ho stampato il reponse proveniente dal server. Non è nullo. Ogni volta che "hard codice" la risposta stringa, parser funziona bene. Ma non riesco a dare una risposta al codice nel mio vero progetto. Per favore aiuto. – iOSDev

+0

Risolviamo questo problema: se la risposta del codice è complessa, il client va bene, ma quando si utilizza la risposta dal server viene visualizzato questo errore? È questo che stai dicendo? – Andrew

+0

Sì, hai ragione. Hardcoding funziona bene ... – iOSDev

0
InputStream xml = new ByteArrayInputStream(xmlData.getBytes()); 
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
Document doc = docBuilder.parse(xml); 
doc.getDocumentElement().normalize(); 
xml.close(); 

Sopra è il codice che sto usando per l'analisi.

+0

Grazie per la ben formattata modifica del codice – iOSDev

3

Il codice attualmente chiama getBytes() utilizzando la codifica di default della piattaforma - è molto raro che sia una buona idea. Scopri che cos'è la codifica dei dati e usali. (E 'probabile che sia UTF-8.)

Se il Blackberry include DocumentBuilder.parse(InputSource), che sarebbe preferibile:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
StringReader reader = new StringReader(xmlData); 
try { 
    Document doc = docBuilder.parse(xml); 
    doc.getDocumentElement().normalize(); 
} finally { 
    reader.close(); 
} 

Se questo non funziona, ha un molto sguardo da vicino alla vostra stringa, per esempio in questo modo:

for (int i=0; i < xmlData.length(); i++) { 
    // Use whatever logging you have on the Blackberry 
    System.out.println((int) xmlData.charAt(i)); 
} 

E 'possibile che il problema sta leggendo la risposta dal server - se stai leggendo male, si potrebbe avere valori null Unicode (\ u0000) nella stringa, che non può apparire, ovviamente, in log/debug output, ma causerebbe l'errore che hai mostrato.

EDIT: Ho appena visto che si stanno ottenendo i dati di base64 in primo luogo, quindi perché convertirlo in una stringa e quindi tornare in byte? Basta decodificare il Base64 in un array di byte e quindi usarlo come base del tuo ByteArrayInputStream. Quindi non devi mai occuparti di una codifica del testo, in primo luogo.

+0

Inoltre, come posso verificare che ho \ u0000 nella stringa? Sono nuovo alla gestione xml, c'è un modo per fare chk? Per favore aiuto. – iOSDev

+2

Guarda il secondo snippet di codice: mostra come esaminare la stringa manualmente. È possibile utilizzare xmlData.indexOf ("\ u0000") per controllare a livello di codice. –

+0

Quale soluzione? E hai esaminato la corda? Sarebbe utile se tu dessi molti più dettagli nella domanda. –

1

Quale codifica di carattere stai usando? Potrebbe essere usato Unicode e lo BOM viene inviato all'inizio?

+0

La risposta proveniente dal server è codificata Base64, che decodifico sul lato client. – iOSDev

12

Si dispone di un carattere null nel flusso di caratteri, ad esempio char (0) che non è valido in un documento XML. Se questo non è presente nella stringa originale, è molto probabile che si tratti di un problema di decodifica dei caratteri.