为什么在 XML 元素名称中包含“(”或“)”字符无效?

Why is it invalid to have "(" or ")" characters in an XML Element Name?

我目前在使用在运行时生成 XML 然后尝试在别处解析它的应用程序时遇到一些问题。

在某些情况下,我收到消息 "error parsing attribute name",这是失败的 XML 示例:

<datastore>
   <row id="Timer?ID=0">
      <ID>0</ID>
      <START_TIME_(sec)>120</START_TIME_(sec)>
   </row>
</datastore>

解析器似乎在尝试读取 ( 字符时失败,其他字符如 )?.

我认为 XML 中唯一无效的字符是此答案中指定的字符:

知道为什么这会失败吗?

这些是要在元素文本中编码的字符,但是 xml 元素名称有一个命名约定。

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

  • 元素名称区分大小写
  • 元素名称必须以 a 开头 字母或下划线
  • 元素名称不能以字母 xml 开头 (或 XML,或 Xml,等等)
  • 元素名称可以包含字母、数字、 连字符、下划线和句点
  • 元素名称不能包含空格

    可以使用任何名称,不保留任何单词(xml除外)。

(来源:http://www.w3schools.com/xml/xml_elements.asp

这意味着您的括号在元素名称中无效

您找到的答案列出了 XML 文档文本中保留的字符,即元素的内容和属性的值。但是,您的示例在元素名称中使用了标点符号,这受到更严格的限制。

完整的允许字符列表可以是 found in the XML specification; note that the first character of the name is even further restricted. (XML 1.1 expands the list of allowed characters slightly 以反映 Unicode 标准的演变。)需要注意的主要事情是来自 ASCII 的大多数常见标点符号(其 Unicode 代码点低于 # x7f) 被排除在外。

通常的做法是只使用以字母开头的名称,然后是字母、数字、下划线和连字符,但是编写良好的 XML 解析器应该处理更广泛的 Unicode 字符应该您希望使用它们。

以"xml"开头的名称(大小写的任意组合)是特别保留的,包含冒号的名称将被解释为使用名称空间,因此也应避免使用这些名称。

请注意,这些受限字符没有转义机制,您只需将格式设计为不需要它们即可。