在XML名称中编码空格字符

我得到一个XML文件,其中包含如下名称:

something 

ↂ符号用三个字节表示:0xE2,0x86,0x82。

看起来ↂ0020应该被视为空间角色。 但是当我使用System.Xml.XmlReader读取XML时,字符ↂ0020不会转换为空格。

有没有办法让它们转换(当然除了更换)? 或者我刚刚破解了XML?

XML没有被破坏,但是它使用私有约定来表示名称以转义不允许的字符。 XML解析器不会理解这个约定,它取决于接收应用程序来解释它。

XML名称中不允许使用空格字符

有86个代码点,其名称包含单词space 。 忽略由于MONOSPACE而导致SPACE命中的代码点以及具有可视表示的任何其他代码点,将留下以下内容:

  • #x0020空间
  • #x00A0#x00A0空间
  • [#x2002-#x200A] EN空间通过头发空间
  • #x205F MEDIUM MATHEMATICAL SPACE
  • #x3000 IDEOGRAPHIC SPACE

W3C XML BNF不允许在XML名称中为组件名称提供与空格相关的代码点(空的可视化表示):

 NameStartChar ::= ":" | [AZ] | "_" | [az] | [#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)* 

XML名称中空格的替代

  • CamelCase
  • underscore_char
  • hyphen-char
  • period.char

不应将冒号用作 XML名称中的单词分隔符,以避免混淆其在XML命名空间中的使用。


ↂ在XML名称中是允许的

字符ↂ,(0xE2,0x86,0x82,它是#x2182 ), 与空格无关 – 它是ROMAN NUMERAL TEN THOUSAND 。 ↂ明确允许: #x2182[#x2070-#x218F]代码范围内。

出现在ↂ之后的0020只是数字。 与Benchↂ0020Codeↂ0020的其他角色Benchↂ0020Codeↂ0020 ,这些形成了一个允许的(尽管是非常规的)XML名称。 它们不构成XML名称中的空格,因为XML名称中不允许使用空格。