根据specification,字符[#x10000-#xFFFF]在XML名称中是合法的。但是,W3验证器说这个XML格式不正确:
<?xml version="1.0"?>
<>value</>
(属性的名称是Unicode字符#x10400)。一些浏览器,如Firefox,也抱怨它(Chrome显示XML,IE显示空白页面)。是工具中的错误还是XML格式不正确?
答案 0 :(得分:2)
工具中是错误还是XML格式不正确?
最新规范中的well formed,即XML 1.0第五版。但是在之前的版本中它是not well-formed,直到2008年。
原始的XML 1.0规范(从1998年开始)将名称字符集锁定为当时Unicode标准中定义为字母的字符。这不包括,仅在几年后才使用Unicode 3.1。
XML 1.1对于它在名称中接受哪些字符更为宽松(主要是因为这个原因,允许来自未来Unicode版本的字符),这是一件好事。然而,XML 1.1从未真正流行起来,因此编辑们决定将更新,更宽松的namechar规则从那里向后移动到1.0。这是controversial,总的来说可能不是一件好事。
这意味着您可以在XML 1.0文档中的名称中使用,并且可以使用已针对第五版更新的解析器子集(或者从未实现过严格的规则),或者您可以使用它们在XML 1.1文档中,可以由支持XML 1.1的不同解析器集使用。
或者,更现实地说,你可以避免那些形式良好的角色 - 完全依赖,并感到有点难过。
答案 1 :(得分:1)
是的,XML名称中允许使用补充字符。
您的XML 格式正确,因为元素名称使用Name中W3C XML Recommendation制作所允许的字符。
<强>然而强>
通过HTTP从您那里获取文件的在线验证器必须具备 注意字符编码。它似乎到了时候 W3C Markup Validation Service获取您的XML,您的角色是 迷失在编码shuffle中:
警告缺少
"charset"
文档的"text/xml"
属性。您的网络浏览器发送的HTTP
Content-Type
标头(text/xml
) (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
)没有 包含"charset"
参数,但Content-Type
是XML之一text/*
子类型。相关规范(RFC 3023)指定强默认值
"us-ascii"
用于此类文档,因此无论如何我们都将使用此值 您可能在其他地方指明的任何编码。如果您想使用其他编码,则应安排 让您的浏览器发送这个新的编码信息。
尝试离线XML解析器。例如,我的基于Xerces-J的验证器正确地将您的XML标识为格式正确。
请注意,NAME中不允许NCNAMEs允许的所有字符。 因此,虽然格式良好,但使用此类字符的XML无法生效 根据不允许使用此类名称的XSD。