Snippet per la lettura di un attributo XML

Molte volte è necessario leggere un file XML in modo programmatico, mappando ad esempio attributi di un nodo xml in campi del proprio object model. Questo snippet di codice permette di leggere un attributo di un nodo, convertirlo nel tipo desiderato e nel caso in cui l'attributo non esista o il relativo valore sia non convertibile nel tipo di destinazione, utilizzare un valore di default.

class XmlHelpers{ public static T GetAttribute<T>(XmlNode node ,string attributeName ,T defaultValue ){ T rtn = defaultValue; XmlAttribute attr = node.Attributes[attributeName]; if (attr != null) { Type type = typeof(T); if (type == typeof(string)) return (T)((object)attr.InnerText); TypeConverter converter = TypeDescriptor.GetConverter(type); try{ object result = converter.ConvertFromString(attr.InnerText); if (result is T) rtn = (T)result; }catch (System.FormatException){} } return rtn; } }

Per richiamarlo posso scrivere ad esempio:

Foo f = new Foo(); f.PropA = XmlHelpers.GetAttribute<bool>(fooNode, "A", false);

posted @ Monday, November 6, 2006 4:19 PM

Print

Comments on this entry:

# re: Snippet per la lettura di un attributo XML

Left by Davide Mauri at 11/6/2006 4:58 PM
Gravatar
Usare "catch (Exception){}" non è consigliabile. E' molto meglio intercettare le eccezioni "previste" e lasciare quelle impreviste al loro destino. Se ci fosse una "OutOfMemoryException" il codice in questione nasconderebbe l'errore....

# re: Snippet per la lettura di un attributo XML

Left by Cristian Bressan at 11/6/2006 5:07 PM
Gravatar
Errata Corrige su segnalazione di Davide.

# re: Snippet per la lettura di un attributo XML

Left by Davide Mauri at 11/6/2006 5:50 PM
Gravatar
:-)

# re: Snippet per la lettura di un attributo XML

Left by sohbet at 2/8/2009 2:01 PM
Gravatar

# re: Snippet per la lettura di un attributo XML

Left by wen at 10/30/2014 4:19 PM
Gravatar
perspective economy months system information check credit score banking director consumers
Comments have been closed on this topic.
«June»
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456