web-dev-qa-db-fra.com

Le nom ne peut pas commencer par le caractère ''

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.

27
Brian Hicks

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.

26
Otávio Décio

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>
7
CZahrobsky

Votre message d'erreur est assez explicite, vous avez une erreur à la posn 3 de la ligne 1. Essayez <?xml - pas d'espace.

6
High Performance Mark

Mon erreur dans la même affaire était que le fichier n'a pas été enregistré au format UTF-8.

3
Migol

Supprimer le premier espace du document:

<?xml version="1.0" encoding="utf-8"?>
3
SLaks

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

1
Manuel Roldan

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>
0
Keith Sirmons

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>.

0
raleign