2009-06-09 10 views
7

Je reçois l'exception suivante lors de l'analyse du fichier XML. J'ai des données XML au format chaîne de caractères et je l'analyse en utilisant l'analyseur DOM. Je suis l'analyse des données qui est une réponse du serveur Java à un client Blackberry. J'ai également essayé d'analyser avec l'analyseur SAX, mais le problème n'est pas résolu. S'il vous plaît aider.Caractère non valide '& # x0' rencontré

+0

nous montrent le xml –

+0

valeur valeur valeur valeur XML est au format chaîne – iOSDev

Répondre

4

Je suis la solution,

je juste garnis de trim() et cela a fonctionné parfaitement bien avec moi.

+0

Oui, peut-être que c'est parce que le caractère "null" était à la fin de votre chaîne. Mais je pense que la vraie solucion devrait utiliser Replace du caractère "\ 0", et le changer pour une chaîne vide. –

2

On dirait que vous essayez d'analyser une chaîne vide en XML. Avez-vous vérifié que le client reçoit une bonne réponse?

+0

Oui, je l'ai imprimé la Reponse provenant du serveur. Ce n'est pas nul. Chaque fois que je "code" la réponse de chaîne, l'analyseur fonctionne très bien. Mais je ne peux pas coder la réponse dans mon vrai projet. S'il vous plaît aider. – iOSDev

+0

Essayons de tout clarifier - si vous codez la réponse, votre client va bien, mais quand vous utilisez la réponse du serveur, vous obtenez cette erreur? Est-ce ce que vous dites? – Andrew

+0

Oui, vous avez raison. Hardcoding fonctionne bien ... – 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(); 

Ci-dessus est le code que j'utilise pour l'analyse.

+0

Merci pour l'édition bien formée du code – iOSDev

3

Votre code appelle actuellement getBytes() en utilisant l'encodage par défaut de la plateforme - c'est très rarement une bonne idée. Découvrez ce qu'est vraiment l'encodage des données et utilisez-les. (Il est susceptible d'être UTF-8.)

Si le Blackberry comprend DocumentBuilder.parse(InputSource), ce serait préférable: Si cela ne fonctionne pas

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(); 
} 

, ont un très regarder de près votre chaîne, par exemple comme ceci:

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

Il est possible que le problème est en train de lire la réponse du serveur - si vous lisez mal, vous pourriez avoir Unicode nulls (\ u0000) dans votre chaîne, qui peut ne pas apparaître évidemment sortie log/debug, mais provoquerait l'erreur que vous avez montré.

EDIT: Je viens de voir que vous obtenez les données base64 en premier lieu - alors pourquoi le convertir en une chaîne, puis revenir en octets? Il suffit de décoder le base64 en un tableau d'octets, puis l'utiliser comme base de votre ByteArrayInputStream. Ensuite, vous n'avez jamais à faire face à un encodage de texte en premier lieu.

+0

Aussi, comment puis-je vérifier que j'ai \ u0000 dans la chaîne? Je suis nouveau à la manipulation de XML, Y at-il un moyen de chk.? S'il vous plaît aider. – iOSDev

+2

Regardez le deuxième extrait de code - il montre comment examiner la chaîne manuellement. Vous pouvez utiliser xmlData.indexOf ("\ u0000") pour vérifier par programme. –

+0

Quelle solution? Et avez-vous examiné la chaîne? Cela aiderait si vous donniez beaucoup plus de détails dans la question. –

1

Quel encodage de caractères utilisez-vous? Se pourrait-il que Unicode soit utilisé et que le BOM soit envoyé au début?

+0

La réponse provenant du serveur est encodée en Base64, que je décode du côté client. – iOSDev

12

Vous avez un caractère nul dans votre flux de caractères, c'est-à-dire un caractère (0) qui n'est pas valide dans un document XML. Si ce n'est pas le cas dans la chaîne d'origine, il s'agit probablement d'un problème de décodage de caractères.

Questions connexes