2010-02-17 12 views
23

Je suis en train d'analyser du code XML en C#. Je l'obtiens d'une base de données, et ainsi le convertissant en mémoireStream avant de le lire avec un XmlTextReader. Le problème est que j'obtiens 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 vide). Aucune suggestion?Le nom ne peut pas commencer par le caractère ''

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 ce pourrait être le codage, mais je l'ai essayé par UTF8 et ASCII et ne peut pas trouver quoi que ce soit.

+1

BTW, sauf si vous utilisez encore .NET 1.1, vous devriez utiliser 'XmlReader.Create()' au lieu de 'new XmlTextReader()'. –

+0

Il ne permet pas de caractère spécial .. –

Répondre

22

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> 

Here est la spécification XML appropriée.

+5

Et le message d'erreur est (pour une fois) complètement sur place sur l'emplacement du problème. – AakashM

3

Retirez le premier espace dans le document:

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

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

7

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 à fonctionner:

<script language="javascript" type="text/javascript"> 
<!-- 
    function myFunction() { 
    } 
    ... 
--> 
</script> 
+0

Je voudrais savoir cela il y a 2 jours - merci! – Julian

0

Je recevais la même erreur en lisant un fichier XML.

Il s'est avéré que j'avais un caractère errant < dans mon fichier.

J'étais en train de commenter certains noeuds enfants et lorsque j'ai effacé l'un des tags de commentaire, j'ai laissé un < supplémentaire 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 meilleur résultat google pour cette recherche exacte.

<node> 
    <!-- <child /> -->< 
    <child /> 
    <child /> 
</node> 
0

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é les espaces qui fonctionnaient pour moi.

était la suivante:

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

1

Mon erreur dans le même cas était que le fichier n'a pas été enregistré en tant que UTF-8.

Questions connexes