Un fichier XML non valide de caractères (Unicode: 0xc) a été trouvé
L'analyse d'un fichier XML à l'aide de Java DOM parser résultats dans:
[Fatal Error] os__flag_8c.xml:103:135: An invalid XML character (Unicode: 0xc) was found in the element content of the document.
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xc) was found in the element content of the document.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
Vous devez vous connecter pour publier un commentaire.
Il y a quelques personnages qui sont dissallowed dans des documents XML, même si vous encapsuler les données dans CDATA-blocs.
Si vous avez créé le document, vous devrez
entité encoder oubande de sortir. Si vous avez un errorneous document, vous devez vous débarrasser de ces personnages avant d'essayer de l'analyser.Voir des dolmens de réponse dans ce fil: Caractères non valides dans le XML
Où il a des liens vers cet article: http://www.w3.org/TR/xml/#charsets
Fondamentalement, tous les caractères ci-dessous 0x20 est rejetée, à l'exception de 0x9 (ONGLET), 0xA (CR?), 0xD (LF?)
Le caractère 0x0C est invalide en XML 1.0, mais serait un caractère valide dans XML 1.1. Donc, à moins que le fichier xml spécifie la version 1.1 dans le prologue, il est tout simplement pas valide et vous devriez vous plaindre pour le producteur de ce fichier.
Ce lien a un code java qui fonctionne parfaitement bien.
http://blog.mark-mclaren.info/2007/02/invalid-xml-characters-when-valid-utf8_5873.html
Chaque fois que xml non valide personnage vient xml, il donne une telle erreur. Lorsque u ouvrir dans notepad++ il ressemble VT, SOH,FF, comme ceux-ci xml non valide caractères. Je m à l'aide de xml version 1.0 et je valide les données de texte avant d'entrer dans la base de données par le modèle
Il veille à ce qu'aucun invalid char spécial entrera en xml
Pattern.compile("[^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFF]+")
Vous pouvez filtrer tous les 'invalide' caractères avec un custom FilterReader classe:
Et l'exécuter comme ceci:
J'ai fait face à un problème similaire où XML contenant des caractères de contrôle. Lorsque l'on regarde le code, j'ai trouvé qu'une classe déprécié,StringBufferInputStream, a été utilisé pour la lecture de la chaîne de contenu.
http://docs.oracle.com/javase/7/docs/api/java/io/StringBufferInputStream.html
Je l'ai changé pour ByteArrayInputStream et il a bien fonctionné.
Pour les personnes qui sont la lecture de tableau d'octets en Chaîne et en essayant de les convertir à l'objet avec JAXB, vous pouvez ajouter "iso-8859-1" de l'encodage par la création de la Chaîne de tableau d'octets comme ceci:
Chaîne JAXBallowedString= new String(byte [entrée], "iso-8859-1");
Ce serait de remplacer le conflit octet de octet de codage qui JAXB peut gérer. Évidemment, cette solution est uniquement pour parser le xml.
Toutes ces réponses semblent partir du principe que l'utilisateur est la génération de la mauvaise XML, plutôt que de la recevoir de gSOAP, qui devrait savoir mieux!