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.
Approfondimenti
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Change tracking e composition in Entity Framework
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
I più letti di oggi
- Creare agenti facilmente con Azure AI Agent Service
- Loggare le query più lente con Entity Framework
- Disabilitare le run concorrenti di una pipeline di Azure DevOps
- Rendere i propri workflow e le GitHub Action utilizzate più sicure
- Gestione degli eventi nei Web component HTML
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- Fornire parametri ad un Web component HTML