Имя не может начинаться с символа '' - PullRequest
29 голосов
/ 17 февраля 2010

Я анализирую некоторые 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 и ничего не могу найти.

Ответы [ 8 ]

29 голосов
/ 17 февраля 2010

Да, вы должны удалить пробел между <? и xml. </p>

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

Здесь - соответствующая спецификация XML.

7 голосов
/ 31 марта 2011

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

<script language="javascript" type="text/javascript">
<!--
    function myFunction() {
    }
    ...
-->
</script>
6 голосов
/ 17 февраля 2010

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

3 голосов
/ 10 мая 2016

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

3 голосов
/ 17 февраля 2010

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

<?xml version="1.0" encoding="utf-8"?>
1 голос
/ 25 июня 2018

Вы также должны быть осторожны и избегать таких выражений, как:

<e order="0" type="custom" name= "test">

Пробел, следующий за равным именем, может привести к сбою кода

0 голосов
/ 15 августа 2015

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

Был:

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

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

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

Здесь тоже было место: . Удалите все пробелы вокруг <и>.

0 голосов
/ 27 марта 2014

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

Оказалось, что в моем файле был ошибочный <символ. </p>

Я комментировал некоторые дочерние узлы, и при удалении одного из тегов комментария я оставил лишний символ

<node>
    <!-- <child /> --><
    <child />
    <child />
</node>
...