2010-02-17 2 views
23

Я разбираю некоторые XML в C#. Я получаю его из базы данных и поэтому конвертирую его в MemoryStream, прежде чем читать его с помощью XmlTextReader. Проблема в том, что я получаю эту ошибку: Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 1, position 3. Ниже приведен мой XML и мой код для его чтения (он выходит из базы данных в порядке, без пустого первого символа). Какие-либо предложения?Имя не может начинаться с символа ''

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

Я думал, что это может быть кодировка, но я пробовал на UTF8 и ASCII и не может найти что-нибудь.

+1

BTW, если вы еще не используете .NET 1.1, вы должны использовать 'XmlReader.Create()' вместо 'new XmlTextReader()'. –

+0

Не допускается специальный символ. –

ответ

22

Да, вы должны удалить промежуток в промежуток между <? и 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 - соответствующая спецификация XML.

+5

И сообщение об ошибке (на этот раз) полностью совпадает с расположением проблемы. – AakashM

3

Удалить первое место в документе:

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

Ваше сообщение об ошибке весьма ясно, у вас есть ошибка в POSN 3 в строке 1. Попробуйте <?xml - нет места.

7

Другим распространенным источником этой ошибки является то, что XmlReader пытается прочитать ваши сценарии как xml. Это хорошая причина, чтобы начинать комментирование скриптов после тегов скрипта. Они все равно будут работать:

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

Хотел бы я знать это 2 дня назад - спасибо! – Julian

0

Я получал ту же ошибку при чтении XML-файла.

Оказалось, у меня был ошибочный персонаж < в моем файле.

Я комментировал определенные дочерние узлы, и при удалении одного из тегов комментариев я оставил дополнительный файл < в файле. Появилось сообщение об ошибке «Имя не может начинаться с символа« \ r », и этот вопрос был лучшим результатом Google для этого точного поиска.

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

У меня было много ошибок из-за этого. Убедитесь, что у вас нет пробелов. Есть два места, где я удалял пробелы, которые работали на меня.

Был:

xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" 

Что сработало:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

Существовало пространства здесь: < а: Защита>. Удалите все пробелы вокруг < и>.

1

Моя ошибка в том же случае была, что файл не был сохранен как UTF-8.

Смежные вопросы