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

时间:2015-03-31 18:19:51

标签: xml xml-parsing

我目前在运行时生成XML的应用程序遇到一些问题,然后尝试在其他地方解析它。

在某些情况下,我收到消息“解析属性名称错误”,这是一个失败的XML示例:

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

一旦尝试阅读字符,其他字符如,解析器似乎就会失败。< / p>

我认为XML中唯一的无效字符与此答案中指定的字符相同:https://stackoverflow.com/a/1091953

知道为什么会失败吗?

2 个答案:

答案 0 :(得分:3)

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

允许字符的完整列表可以是found in the XML specification;请注意,名称的第一个字符甚至被进一步限制。 (XML 1.1 expands the list of allowed characters slightly反映了Unicode标准的演变。)需要注意的主要事项是,大多数常见的ASCII标点符号(其中包含#x7f以下的Unicode代码点)都被排除在外。

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

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

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

答案 1 :(得分:0)

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

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

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

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

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

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