#118 - Esaminare documenti con namespace con LINQ e XDocument
di Andrea Zani, in LINQ, LINQ To XML, 6 maggio 2009
XMl è diventato uno standard di fatto. Da questo formato sono nati mille dialetti per la memorizzazione e la 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 della sintassi XPath con le classi del .NET framework o con LINQ To XML. La normale sintassi XPath deve essere modificata e devono essere usate tecniche particolati 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 che sfrutta LINQ To XML. Prima di tutto si includono i namespace:
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";I namespace sono presenti dopo la stringa "xmlns". Solo nel primo caso abbiamo creato una fittizia ("az") perché non presente. In questo modo possiamo eseguire ricerche XPath nel seguente modo, specificando il namespace utilizzato:
var obj = from s in xmlDoc.Descendants(az + "Workbook") select s;
Approfondimenti
-
ModelVirtualCasting: un'applicazione completa per .NET Framework 4.0 e Silverlight 4.0
-
#120 - Filtrare i risultati di una query in base ad una lista di dati predefiniti con Entity Framework
-
#979 - ASP.NET ed Entity Framework: Dynamic Data Control
-
nuovo tool da ms resarch: dotolo. ottimizza il cariamento delle pagine #ajax, gira con #netfx3.5 http://u.aspitalia.com/ah
-
MetadataDiffViewer: differenze tra i framework
-
#133 - Una collezione avanzata per il data binding di WPF
-
.NET Framework 4.0 Beta 1: Entity Framework
-
#148 - Scoprire le pagine attualmente più richieste su IIS con LINQ e Microsoft.Web.Administration
-
.NET Framework 4.0 beta 1: Windows Communication Foundation
-
#164 - Eseguire una stored procedure tramite l'Entity Client di Entity Framework
-
#130 - Effettuare una query XPath con LINQ To XML
-
#125 - Scaricare un file FTP tramite FtpWebRequest

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.