¿Cómo asegurar una entidad XML tiene un nombre válido
-
26-09-2019 - |
Pregunta
Tengo una aplicación que genera un montón de XML con sede fuera de algunos datos de una fuente que no controlo. Básicamente me estoy convirtiendo esos datos en un documento XML para servir a través de los canales RSS. Puedo conseguir datos como
2_br=1
3_br=0
y estoy convirtiéndolo en el siguiente XML
<2_br>1</2_br>
<3_br>0</3_br>
Es evidente que una etiqueta XML no puede comenzar con un dígito. No pude encontrar en cualquier lugar de una lista de caracteres válidos. Hace que existe en algún lugar? Estoy básicamente sólo va a prefijo y el carácter de partida válido o reemplazar un carácter no válido en línea con un _
.
No es difícil de hacer, pero básicamente yo sólo puedo encontrar una lista de caracteres no válidos para un nombre de etiqueta XML.
Solución
¿Qué tal esto: Extensible Markup Language (XML) 1.0 (Quinta Edición)
NameStartChar :: = ":" | [A-Z] | "_" | [A-z] | [# # XC0- xd6] | [# # XD8- xf6] | [# # XF8- x2FF] | [# # X370- x37D] | [# # X37F- x1FFF] | [# # X200D x200C-] | [# # X2070- x218F] | [# # X2C00- x2FEF] | [# # X3001- xD7FF] | [# # XF900- xFDCF] | [# # XFDF0- xFFFD] | [# # X10000- xEFFFF]
Otros consejos
XmlConvert.IsNCNameChar()
y
XmlConvert.IsStartNCNameChar()
se puede utilizar para validar un nombre XML-etiqueta:
char[] validTagNameChars = pDesiredTagName.Where(ch => XmlConvert.IsNCNameChar(ch)).ToArray();
string validTagName = new string (validTagNameChars);
if (validTagName == "" || !XmlConvert.IsStartNCNameChar(validTagName[0]))
validTagName = "_" + validTagName;