J'analyse du XML en C #. Je l'obtiens d'une base de données, et le convertis donc en MemoryStream avant de le lire avec un XmlTextReader. Le problème est que je reçois cette erreur: Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 1, position 3.
Voici mon XML et mon code pour le lire (ça sort de la base de données, pas de premier caractère vierge). Aucune suggestion?
XML:
<? xml version="1.0" encoding="utf-8" ?>
<form>
<e order="0" type="custom" name="test">
<fi type="text" />
<o />
</e>
<e order="1" type="Zip" />
<e order="2" type="state" />
</form>
C #:
byte[] byteArray = new byte[formXml.Length];
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byteArray = encoding.GetBytes(formXml);
MemoryStream xmlStream = new MemoryStream(byteArray);
XmlTextReader xmlReader = new XmlTextReader(xmlStream);
while (xmlReader.Read())
{
if (xmlReader.HasValue)
{
returnString += xmlReader.Depth.ToString();
}
}
Je pensais que cela pourrait être l'encodage, mais j'ai essayé avec UTF8 et ASCII et je ne trouve rien.
Oui, vous devez supprimer l'espace entre <? et xml.
<?xml version="1.0" encoding="utf-8" ?>
<form>
<e order="0" type="custom" name="test">
<fi type="text" />
<o />
</e>
<e order="1" type="Zip" />
<e order="2" type="state" />
</form>
Ici est la spécification XML pertinente.
Une autre source courante de cette erreur est lorsque XmlReader tente de lire vos scripts en tant que XML. C'est une bonne raison de commencer à commenter les scripts après les balises de script. Ils continueront à courir:
<script language="javascript" type="text/javascript">
<!--
function myFunction() {
}
...
-->
</script>
Votre message d'erreur est assez explicite, vous avez une erreur à la posn 3 de la ligne 1. Essayez <?xml
- pas d'espace.
Mon erreur dans la même affaire était que le fichier n'a pas été enregistré au format UTF-8.
Supprimer le premier espace du document:
<?xml version="1.0" encoding="utf-8"?>
Vous devez également faire attention et éviter les expressions telles que:
<e order="0" type="custom" name= "test">
L'espace vide qui suit l'égalité du nom pourrait faire planter votre code
J'avais la même erreur en lisant un fichier XML.
Il s'est avéré que j'avais un caractère errant <dans mon dossier.
Je commentais certains nœuds enfants et lors de l’effacement d’une des balises de commentaire, j’ai laissé un <dans le fichier. Le message d'erreur est revenu "Le nom ne peut pas commencer par le caractère '\ r'" et cette question était le premier résultat de Google pour cette recherche exacte.
<node>
<!-- <child /> --><
<child />
<child />
</node>
J'ai eu beaucoup d'erreurs à cause de cela. Assurez-vous de ne pas avoir d'espaces. Il y a deux endroits où j'ai supprimé des espaces qui ont fonctionné pour moi.
Était:
xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"
Ce qui a fonctionné:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Il y avait un espace ici aussi: <abc: def>. Supprimez tous les espaces autour du <et du>.