名称不能以字符'1'开头,十六进制值为0x31。第2行,第2个位置。

11

在C#应用程序中加载XML文件时,我遇到了以下错误:

名称不能以字符“1”开头,十六进制值为 0x31。 第2行,第2个位置。

XML标签如下所示。

<version="1.0" encoding="us-ascii" standalone="yes" />
<1212041205115912>

我绝不可以以任何代价更改此标签。

我该如何解决这个问题?


1
如果你绝对不能改变标签,那么你就必须自己实现一个不会在XML标准下验证文件的XML解析器。因为当前的标签名称无法通过XML标准的验证。 - Robert Rouhani
谢谢。但是,我能够在像Notepad++这样的编辑器中查看相同的XML而没有任何验证错误。它是如何进行验证的? - aWebdesigner09
3
Notepad++ 默认不会验证任何文件,它只会通过字符位置(如 <>")来给它们着色。 - Robert Rouhani
1
@aWebdesigner09 如果你使用合适的工具来生成XML,就不会生成这样的文件。 - Felice Pollano
这是一个非常糟糕的想法。 但是,它符合我的要求。 我通过以下方式解决了这个问题:
  • 使用文本文件读取XML文件
  • 通过String.Replace()替换数字
  • 然后再次读取。
我承认,这不是正确的方法。 但是,C#允许我编写这样的标签。
- aWebdesigner09
显示剩余2条评论
3个回答

16

由于您编写的标签名称违反了XML标准,因此您应该更改标签名称。

XML命名规则

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

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

任何名称都可以使用,没有保留任何单词。

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

  1. 使用属性,例如 <Number value="1212041205115912"/>
  2. 添加前缀到标签中,例如 <_1212041205115912/>

当然,您可以通过编写自己的格式解析器来维护您提出的结构,但我可以说这是一个非常糟糕的想法,因为将来可能会有人扩展该格式,并且不会高兴看到似乎是XML文件实际上不是,他/她可能会因此生气。此外,如果您想要自定义格式,请使用更简单的东西,我的意思是:如果它不是官方认可的格式,则在文本文件中混合一些“<”和“>”并不会增加任何价值,最好使用类似于简单纯文本文件的东西。


谢谢。但是,我能够在像Notepad++这样的编辑器中查看相同的XML文件,而没有任何验证错误。 - aWebdesigner09
5
据我所知,Notepad++只是进行一些语法着色。同样重要的是,它不是XML格式的官方来源 :) - Felice Pollano

4

如果你绝对不能改变它,例如因为该格式已经在其他系统/客户/等中使用或发布。

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

这种方法有些靠不住,但可以解决你的问题。


4
如果你需要处理这份文档,就不要把它看作XML,并且放弃使用XML工具来处理它的想法。你正在处理一种专有格式,需要编写自己的工具来处理它。如果你想享受使用XML技术带来的好处,你需要重新设计文档使其成为有效的XML格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接