在XML名称中编码空格字符

时间:2017-10-08 17:51:01

标签: c# xml

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

<Benchↂ0020Codeↂ0020>something</Benchↂ0020Codeↂ0020>

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

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

是否有办法让他们转换(当然除了替换)?或者我刚刚破解了XML?

2 个答案:

答案 0 :(得分:4)

XML名称

中不允许使用空格字符

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解析器不理解这个约定,它由接收应用程序来解释它。