名称不能以''字符开头

时间:2010-02-17 16:35:46

标签: c# xml memorystream xmltextreader

我正在使用C#解析一些XML。我从数据库中获取它,因此在使用XmlTextReader读取它之前将其转换为MemoryStream。问题是我收到了这个错误: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,但找不到任何东西。

9 个答案:

答案 0 :(得分:29)

是的,您应该删除&lt ;?之间的空格和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规范。

答案 1 :(得分:7)

此错误的另一个常见原因是XmlReader尝试将您的脚本读取为xml。这是在脚本标记之后开始注释脚本的一个很好的理由。它们仍会运行:

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

答案 2 :(得分:6)

您的错误消息非常明确,您在第1行的第3位发生错误。请尝试<?xml - 没有空格。

答案 3 :(得分:3)

删除文档中的第一个空格:

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

答案 4 :(得分:3)

在同样的情况下我的错误是文件没有保存为UTF-8。

答案 5 :(得分:1)

您还应该小心,避免使用类似以下的表达式:

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

名称后面的空格可能会使您的代码崩溃

答案 6 :(得分:0)

我在读取XML文件时遇到同样的错误。

原来我有一个错误&lt;我文件中的字符。

我正在评论某些子节点,当删除其中一个评论标签时,我留下了额外的&lt;在文件中。错误消息返回&#34;名称不能以&#39; \ r&#39;字符&#34;这个问题是该搜索的最佳谷歌搜索结果。

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

答案 7 :(得分:0)

因此我犯了很多错误。确保没有空格。有两个地方我删除了适合我的空间。

当时:

mysql --user=MYUSERNAME --password=MYPASSWORD --database=MYDATABASE --execute="LOAD DATA LOCAL INFILE \"/home/MYFILE.csv\" INTO MYDATABASE.MYTABLE FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 2 LINES“

什么有效:

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

这里也有一个空间:&lt; abc:def&gt;。删除&lt;周围的所有空格。和&gt;。

答案 8 :(得分:0)

如果在SSIS中,只需转到解决方案资源管理器,选择项目,然后从“生成”菜单选项中选择“重新生成解决方案”。