名称不能以"1"字符开头,十六进制值0x31.第2行,第2位

aWe*_*r09 11 c# xml xmldocument

在C#应用程序中加载XML文件时,我得到了

名称不能以"1"字符开头,十六进制值0x31.第2行,第2位.

XML标记就像这样开始.

<version="1.0" encoding="us-ascii" standalone="yes" />
<1212041205115912>
Run Code Online (Sandbox Code Playgroud)

我不应该不惜一切代价改变这个标签.

我该如何解决这个问题?

Fel*_*ano 15

您应该更改标记名称,因为您编写的标记名称违反了xml标准.只是为了记住它的有趣部分:

XML命名规则

XML 元素 必须遵循以下命名规则:

  • 名称可以包含字母,数字和其他字符
  • 名称不能以数字或标点字符开头
  • 名称不能以字母xml(或XML或Xml等)开头
  • 名称不能包含空格

可以使用任何名称,不保留任何单词.

作为解决您的问题的建议,保持标准:

  1. 使用属性,即<Number value="1212041205115912"/>
  2. 为标签添加前缀即 <_1212041205115912/>

当然你可以通过编写自己的格式解析器来保存你提出的结构,但是我可以说这是一个非常糟糕的主意,因为将来有人可能会扩展格式并且不会很高兴看到看起来像这样的文件xml实际上不是,他/她可以为此生气.此外,如果你想要你的自定义格式,使用更简单的东西,我的意思是:如果文本文件不是官方认可的格式,那么使用"<"和">"来删除文本文件不会增加任何值,最好使用类似的东西.一个简单的纯文本文件.

  • AFAIK notepad ++只是做了一些语法着色.同样重要的是它不是XML格式的官方来源:) (5认同)

Rog*_*son 4

如果你绝对不能改变它,例如。由于某种原因,该格式已经广泛使用并被其他系统/客户/其他系统使用。

由于它是无效的 xml 文档,因此在解析它之前尝试清理它。例如。制作一个正则表达式,将所有 <number> 标记替换为 <IMessedUp>number</IMessedUp>,然后解析它。

这样做有点不确定,但我会解决你的问题。