在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名称中不允许使用空格。