XMl è diventato uno standard di fatto. Da questo formato sono nati mille dialetti per la memorizzazione e rappresentazione di qualsiasi dato. Per identificare in modo univoco i tag all'interno di un documento XML è possibile definire dei namespace. La loro presenza comporta dei problemi nell'utilizzo degli xpath con LINQ to XML. La normale sintassi xpath deve venire modificata e devono essere usate tecniche particolari per la lettura dei documenti.
Prendendo un esempio reale, in Excel è possibile salvare i propri documenti in formato XML. Il documento prodotto ha questa struttura:
<?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> <Author>AZ</Author> <LastAuthor>AZ</LastAuthor> <Created>2008-10-25T18:55:59Z</Created> <Company>Home</Company> <Version>12.00</Version> </DocumentProperties> ...
Nel tag WorkBook sono definiti tutti i namespace utilizzati. Per poter eseguire delle ricerche all'interno di questo documento abbiamo a disposizione varie tecniche, vediamone una con LINQ to XML. Per includere tutti i namespace definiti nell'XML appena visto:
var xmlDoc = XDocument.Load(Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "test.xls") ); XNamespace az= "urn:schemas-microsoft-com:office:spreadsheet"; XNamespace html="http://www.w3.org/TR/REC-html40"; XNamespace o="urn:schemas-microsoft-com:office:office"; XNamespace xsi="http://www.w3.org/2001/XMLSchema-instance"; XNamespace x2="http://schemas.microsoft.com/office/excel/2003/xml"; XNamespace ss="urn:schemas-microsoft-com:office:spreadsheet"; XNamespace x="urn:schemas-microsoft-com:office:excel";
Per eseguire le query con LINQ è sufficiente concatenare i Namespace definiti al nome del tag:
var obj = from s in xmlDoc.Descendants(az + "Workbook") select s;
In allegato a questo script, è presente un esempio che legge un documento Excel 2003, salvato in formato XML, e ne visualizza il contenuto.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.