42

我正在用 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 并且找不到任何东西。

4

9 回答 9

41

是的,您应该删除 <? 和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>

是相关的 XML 规范。

于 2010-02-17T16:37:11.967 回答
7

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

<script language="javascript" type="text/javascript">
<!--
    function myFunction() {
    }
    ...
-->
</script>
于 2011-03-31T19:23:42.567 回答
6

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

于 2010-02-17T16:38:52.620 回答
5

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

<?xml version="1.0" encoding="utf-8"?>
于 2010-02-17T16:37:32.213 回答
3

我在同一情况下的错误是该文件未保存为 UTF-8。

于 2016-05-10T07:11:00.300 回答
2

您还应该小心并避免以下表达:

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

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

于 2018-06-25T13:39:30.603 回答
0

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

原来我的文件中有一个错误的 < 字符。

我正在注释掉某些子节点,并且在删除其中一个注释标签时,我在文件中留下了一个额外的 <。错误消息返回“名称不能以 '\r' 字符开头”,这个问题是该精确搜索的最高谷歌结果。

<node>
    <!-- <child /> --><
    <child />
    <child />
</node>
于 2014-03-26T22:36:56.570 回答
0

因为这个,我有很多错误。确保没有空格。有两个地方我删除了对我有用的空间。

曾是:

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

什么有效:

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

这里也有一个空格:< abc:def >。删除 < 和 > 周围的所有空格。

于 2015-08-14T21:50:18.640 回答
0

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

于 2020-09-18T16:21:47.803 回答