Come garantire un'entità XML ha un nome valido
-
26-09-2019 - |
Domanda
Ho un app che genera un po 'di XML in base al largo di alcuni dati da una fonte che non mi controllo. Fondamentalmente io sto trasformando i dati in un documento XML per servire tramite i feed RSS. I può essere ottenere i dati come
2_br=1
3_br=0
e sto trasformandolo nel seguente codice XML
<2_br>1</2_br>
<3_br>0</3_br>
Ovviamente un tag XML non può iniziare con una cifra. Non riuscivo a trovare da nessuna parte un elenco di caratteri validi. Fa esiste da qualche parte? Sono fondamentalmente solo andando a prefisso e il carattere di partenza non valida o sostituire un carattere non valido in linea con un _
.
Non è difficile da fare, ma in fondo ho appena cant trovare un elenco di caratteri non validi per un nome tag XML.
Soluzione
Che ne dite di questo: Extensible Markup Language (XML) 1.0 (quinta edizione)
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]
Altri suggerimenti
XmlConvert.IsNCNameChar()
e
XmlConvert.IsStartNCNameChar()
può essere utilizzato per convalidare un nome XML-tag:
char[] validTagNameChars = pDesiredTagName.Where(ch => XmlConvert.IsNCNameChar(ch)).ToArray();
string validTagName = new string (validTagNameChars);
if (validTagName == "" || !XmlConvert.IsStartNCNameChar(validTagName[0]))
validTagName = "_" + validTagName;