正如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中被广泛使用.