我得到一个XML文件,其中包含如下名称:
<Benchↂ0020Codeↂ0020>something</Benchↂ0020Codeↂ0020>
ↂ符号用三个字节表示:0xE2,0x86,0x82。
看起来ↂ0020应该被视为空间角色。但是当我使用System.Xml.XmlReader读取XML时,字符ↂ0020不会转换为空格。
是否有办法让他们转换(当然除了替换)?或者我刚刚破解了XML?
答案 0 :(得分:4)
有86 codepoints whose name contain the word space。忽略由于MONOSPACE而导致SPACE命中的代码点以及具有可视表示的任何其他代码点,将留下以下内容:
#x0020
SPACE #x00A0
NO-BREAK SPACE [#x2002-#x200A]
EN空间通过头发空间#x205F
MEDIUM MATHEMATICAL SPACE #x3000
IDEOGRAPHIC SPACE W3C XML BNF for component names在XML名称中不允许任何与空格相关的代码点(空的可视化表示):
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)*
XML名称中空格的替代
CamelCase
underscore_char
hyphen-char
period.char
Colon should not be used作为XML名称中的单词分隔符,以避免与其在XML命名空间中的使用混淆。
XML名称中允许字符ↂ,(0xE2,0x86,0x82,#x2182
), 与空格无关 - 它是{{3 }}。
ↂ明确允许:#x2182
位于[#x2070-#x218F]
代码范围内。
在ↂ之后出现的0020
只是数字。与Benchↂ0020Codeↂ0020
中的其他字符一起,这些形成了一个允许的(尽管是非常规的)XML名称。它们不构成XML名称中的空格,因为XML名称中不允许使用空格。
答案 1 :(得分:1)
XML并没有被破坏,但是它使用私有约定来表示名称以逃避不允许的字符。 XML解析器不理解这个约定,它由接收应用程序来解释它。