PARTE 3 – CAPITOLO 5 – Files e Xml
Anche se in misura e con modalità diverse, anche le Web Application spesso interagiscono con files esterni che necessitano di essere letti e/o scritti.
Non è mie intenzione, in questa mini-guida, perdere troppo tempo a parlare della gestione classica dell’I/O: sappiate che il comportamento della Web Application è identico a quello di una Windows Application. Vi basterà includere la risorsa “System.IO” e utilizzare a dovere le risorse File, Directory, FileInfo, DirectoryInfo, DriveInfo e derivati. Bisogna solamente assicurarsi che l’utente impersonato dalla Web Application abbia i permessi per accedere in lettura e/o scrittura alla risorsa sulla partizione NTFS. Le cose da aggiungere sono davvero poche: degno di nota è il controllo per effettuare in modo semplice ed intuitivo l’upload dei files sul server, così come la gestione della eventuale concorrenza (risolvibile o con il lock e l’unlock della risorsa o con l’utilizzo di GUID univoci).
È utile invece spendere qualche parola in più sulla gestione dei files XML.
XML è un metalinguaggio (descrive le regole per creare linguaggi customizzati con keyword personali). Questa possibilità porta ad una assoluta flessibilità ma anche alla necessità di interpretare spesso in modo diverso files XML provenienti da fonti diverse.
Ci sono tre scenari in cui è particolarmente indicato utilizzare file XML: manipolare dati XML già esistenti, creare file di dati per permettere in futuro l’integrazione con servizi diversi e utilizzare una tecnologia che dipende da XML (ad esempio molti web services).
Esistono regole precise per creare un XML valido: ogni tag di apertura deve avere un tag di chiusura, un elemento vuoto deve finire con ‘/>’, le pile di apertura e chiusura devono essere rispettate, i tag devono essere uguali (è un linguaggio case sensitive), un elemento non può avere due attributi con lo stesso nome, un documento può avere un solo elemento root, tutti gli attrubuti devono avere le doppie virgolette e non ci possono essere commenti all’interno dei tags.
Per dichiarare un Namespace (insieme di regole di formattazione) basta inserire l’indirizzo URI-like nel tag ”.
Uno Schema (”) è un documento formale in cui vengono esposte le regole di un particolare linguaggio XML-based.
Per scrivere un file XML uso un XmlTextWriter su cui vengono aggiunti, nell’ordine, il WriteStartDocument(), i WriteStartElement(), i WriteAttributeString(), i WriteElemenString() e infine WriteEndElement().
Il linguaggio utilizzato per manipolare file XML è detto XSL (eXtensible Stylesheet Language).
La lettura di un file XML è molto semplice: dopo aver aperto un XmlTextReader e aver dichiarato una StringBuilder (per aggiungere dinamicamente i risultati letti dall’xml) basta dichiarare un ciclo “while reader.Read()” e switchare tra i vari “case”: XmlNodeType.XmlDeclaration, XmlNodeType.Element, XmlNodeType.Text. Per leggere gli attributi uso un “if (reader.AttributeCount > 0)” all’interno del quale ciclo (sempre con un while, reader.MoveToNextAttribute())”.
XmlDocument memorizza informazioni come un albero di nodi.
XDocument è un modello all-purpose per gestire gli XML in memoria. È molto flessibile in quanto permette di scrivere XML in modo semplice e veloce aggiungendo via via nuovi “new XElement” in cui verranno passati la chiave e il contenuto.
Per gestire al meglio la ricerca in un XML uso Xpath. “/” cerca nodi figli, “//” cerca figli ricorsivi, “@” seleziona un attributo su un nodo, “*” seleziona tutti i nodi figli, “|” combina path multipli, “.” Indica il nodo corrente, “..” indica il nodo padre, “[]” definisce i criteri di ricerca.
Grazie agli stylesheet xsl è possibile definire uno stile di base per l’XML.