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.