【问题标题】:Using - in XML element name在 XML 元素名称中使用 -
【发布时间】:2009-09-25 17:05:11
【问题描述】:

可以在 XML 元素名称中使用 hyphen- 吗?

例如

<rank-type>Rank</rank-type>

【问题讨论】:

  • 我认为这样做是有效的,但我知道当您尝试引用 $node->child-node 之类的节点时,它会使 PHP 中的 SimpleXML 解析器不满意。
  • inkedmn,我希望它会让 php 解析器不开心,而不是 SimplXML 解析器 ;-) 因为,它实际上是 $node-&gt;child - node
  • 你可以像 $node->{'child-node'} 一样访问它。

标签: xml


【解决方案1】:

正如 Vinko 和黑客所言,答案是

是的,名称中允许使用破折号,无论是元素名称还是属性名称。但是破折号不能是名称中的第一个字符

W3C standard 定义名称如下(第 2.3 节)

NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
NameChar  ::=   NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
Name  ::= NameStartChar (NameChar)*

忽略各种扩展的 ASCII 字符和双字节字符(在语法定义中以 # 符号开头),名称需要以大写或小写字母 (A-Z)、冒号 (:) 或下划线开头.此起始字符之后的字符(如果有)(即,如果名称不是单个字符)可以是任何有效的起始字符和/或任何数字 (0-9)、著名的破折号 (-) 和点(.)

正如其他回复中所指出的,在可能的情况下,建议避免使用某些字符,即使它们可能是合法的,以免我们冒着遇到各种解析器和互操作层的特定实现困难的风险。

W3C 本身隐含地证明了破折号的使用是正确的,因为这些破折号在 XSL 中被广泛使用。

【讨论】:

    【解决方案2】:

    这不是属性名称,而是元素名称。

    在任何情况下,只要名称不以它开头( 不是有效的元素名称),规范中的属性和元素名称都支持。

    不过,有些软件可能会卡住它,因此请注意。如果您必须使用此类软件,请尝试寻找更好的软件或使其开发人员正确支持 XML 规范。

    W3CSchools' (polemic) recommendations

    使名称具有描述性。带有一个的名字 下划线分隔符很好:

    名称应该简短明了,例如 这: 不是这样的:

    避免使用“-”字符。如果你的名字 一些“名字”,一些软件 可能认为你想减去名字 从一开始。

    避免使用“.”人物。如果你的名字 一些“名字”,一些软件 可能认为“名称”是 对象“第一”。

    避免使用“:”字符。冒号是 保留用于某事 称为命名空间(稍后会详细介绍)。

    XML 文档通常有一个 对应的数据库。一个好的 实践是使用命名规则 您的数据库中的元素 XML 文档。

    像 éòá 这样的非英文字母在 XML 中是完全合法的,但如果您的软件供应商不支持它们,请注意问题。

    【讨论】:

    • 那么,&lt;first_name /&gt; 是一个不错的元素名称,而 &lt;xsl:value-of /&gt; 不是?
    • 它们都是有效的。我假设这个问题可能在他与 - 发生的某些事件中有一个原因。那个原因可能是有缺陷的软件。
    • Vinko,我说的是“不错”,而不是“有效”。当w3cschools 指责w3c 使用最糟糕的做法时,我认为这很有趣;-) 而个人出于审美原因,我站在w3c 一边。
    • 我现在已经阐明了含义。
    • 我个人认为没有元素或属性名称“不错”。我只关心有效性和实用性。如果你被一个糟糕的图书馆困住,这可能是不切实际的。
    【解决方案3】:

    是的,是的。但是您的示例显示了元素名称,而不是属性名称。这也是有效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-07
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多