remarks generate example comentarios c# xml

c# - generate - Codificación del carácter de espacio en nombre XML



params comments c# (2)

Me dieron un archivo XML que contiene nombres como a continuación:

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

El símbolo is se representa con tres bytes: 0xE2, 0x86, 0x82.

Parece que se supone que ↂ0020 debe tratarse como personaje espacial. Pero cuando leo el XML usando System.Xml.XmlReader, los caracteres ↂ0020 no se convierten a espacio.

¿Hay alguna forma de convertirlos (además de reemplazarlos, por supuesto)? ¿O acabo de romper XML?


Los caracteres espaciales no están permitidos en nombres XML

Hay 86 puntos de código cuyo nombre contiene el espacio de palabras . Ignorar los puntos de código donde SPACE impacta debido a MONOSPACE y cualquier otro que tenga una representación visual, deja lo siguiente:

  • #x0020 ESPACIO
  • #x00A0 ESPACIO SIN #x00A0
  • [#x2002-#x200A] EN ESPACIO a través del ESPACIO DEL PELO
  • #x205F ESPACIO MATEMÁTICO MEDIANO
  • #x3000 x3000 ESPACIO IDEOGRÁFICO

Ninguno de los puntos de código relacionados con el espacio (representación visual vacía) están permitidos en los nombres XML por el W3C XML BNF para los nombres de los componentes :

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)*

Alternativas a espacios en nombres XML

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

Colon no se debe usar como separador de palabras en nombres XML para evitar confusiones con su uso en espacios de nombres XML.

ↂ está permitido en nombres XML

El carácter, ↂ, (0xE2, 0x86, 0x82, que es #x2182 ), no tiene nada que ver con los espacios : es ROMAN NUMERAL DIEZ MIL . ↂ está explícitamente permitido: #x2182 está en el rango de código [#x2070-#x218F] .

Los 0020 aparecen después de ↂ son solo dígitos. Junto con el resto de los personajes de Benchↂ0020Codeↂ0020 , estos forman un nombre XML permitido (aunque no convencional). No constituyen espacios en el nombre XML, ya que no se permiten espacios en los nombres XML.


El XML no está roto, pero representa nombres que usan una convención privada para escapar de caracteres no permitidos. El analizador XML no entenderá esta convención, depende de la aplicación receptora interpretarla.