【问题标题】:Name cannot begin with the '1' character, hexadecimal value 0x31. Line 2, position 2名称不能以“1”字符开头,十六进制值 0x31。第 2 行,位置 2
【发布时间】:2012-05-17 16:00:21
【问题描述】:

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

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

XML 标记是这样开始的。

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

我不应该不惜一切代价更改此标签。

我该如何解决这个问题?

【问题讨论】:

  • 如果您绝对不能更改标签,那么您将不得不实现自己的 XML 解析,它不会验证文件,因为当前标签名称不会在 XML 标准下验证。
  • 谢谢。但是,我可以在 notepad++ 等编辑器中查看相同的 XML,而不会出现任何验证错误。它是如何验证的?
  • Notepad++ 默认不验证任何文件。它只是根据&lt;&gt;" 等字符的位置为它们着色。
  • 谢谢。但是,我只能用 C# 编写该文件。有什么解决办法吗?
  • @aWebdesigner09 如果您使用 proper 工具生成 XML,则无法生成这样的文件。

标签: c# xml xmldocument


【解决方案1】:

您应该更改标签名称,因为您编写的标签名称违反了the xml standard。 在这里记住其中有趣的部分:

XML 命名规则

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

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

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

作为解决您维护标准问题的建议:

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

当然,您可以通过编写自己的格式解析器来维护您建议的结构,但我可以说这将是一个非常糟糕的主意,因为将来有人可能会扩展格式并且不会很高兴看到看似xml的文件其实不是,他/她可以get angry for that。此外,如果您想要自定义格式,请使用更简单的格式,我的意思是:如果文本文件不是官方认可的格式,则使用一些 '' 混淆文本文件不会增加任何价值,最好使用类似的东西一个简单的纯文本文件。

【讨论】:

  • 谢谢。但是,我可以在 notepad++ 等编辑器中查看相同的 XML,而不会出现任何验证错误。
  • AFAIK notepad++ 只是做了一些语法着色。同样重要的是,它不是 XML 格式的官方来源 :)
【解决方案2】:

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

由于是无效的xml文档,请在解析前尝试清理。 例如。制作一个正则表达式,用 number 替换所有 标签,然后解析它。

有点不靠谱,但我会解决你的问题。

【讨论】:

    【解决方案3】:

    如果您需要处理此文档,请停止将其视为 XML,并放弃使用 XML 工具处理它的任何想法。您正在处理专有格式,您需要编写自己的工具来处理它。如果您想要使用 XML 技术的好处,您将不得不重新设计您的文档,使它们成为有效的 XML。

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2019-10-25
      • 2017-12-25
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多