1 / 37

WebCast XML e .NET Framework

WebCast XML e .NET Framework. Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT paolo@devleap.com Italian BLog: http://blogs.devleap.com/paolo.blog. Agenda . System.Xml XMLReader, XMLWriter, XMLDocument System.Xml.XPath XPathDocument, XPathNavigator, XPathExpression System.Xml.Xsl

herne
Download Presentation

WebCast XML e .NET Framework

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. WebCastXML e .NET Framework Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT paolo@devleap.com Italian BLog: http://blogs.devleap.com/paolo.blog

  2. Agenda • System.Xml • XMLReader, XMLWriter, XMLDocument • System.Xml.XPath • XPathDocument, XPathNavigator, XPathExpression • System.Xml.Xsl • XslTransform • System.Xml.Schema • XmlSchema, XmlSchemaCollection • XML con ASP.NET e ADO.NET www.devleap.com

  3. Scopo di questa sessione • Capire come: • utilizzare i documenti XML • sfruttare le tecnologie del mondo XML • All’interno di applicazioni realizzate con il .NET Framework • Avremo un approccio pratico, di quasi tutto vedremo il codice di esempio www.devleap.com

  4. System.XML • Tecnologie e standard supportati: • XML, Namespaces, XSLT, XPath, XSD, Document Object Model • Estendibilità • si basa su classi astratte che si possono ereditare • fornisce già delle classi di uso comune che ereditano dalle classi astratte • Incremento delle prestazioni rispetto ad MSXML • Fortemente legato ad ADO.NET • Non è un’evoluzione di MSXML • E’ completamente diverso ! www.devleap.com

  5. XML 1.0Namespaces XmlWriter Astratta XmlReader Astratta XmlTextWriter XmlTextReader XmlNodeReader Classi astratte eimplementazioni di base www.devleap.com

  6. XMLReader • E’ una classa astratta (MustOverride/abstract) • Non possiamo quindi istanziarla direttamente • Rappresenta un cursore forward-only read-only privo di caching • E’ pensata per leggere velocemente documenti XML senza tenere traccia di ciò che è già stato processato (idea già presente in SAX) • Funziona in modalità Pull mentre SAX ragiona in modalità Push www.devleap.com

  7. XmlTextReader • Eredita da XmlReader • Può caricare il contenuto di: • TextReader, Stream, Stringhe, Url, File Imports System.Xml... Dim objXMLTextReader As System.Xml.XmlTextReaderobjXMLTextReader = New XmlTextReader("C:\Ordine.XML")With objXMLTextReader While .Read() Select Case .NodeType Case XmlNodeType.Element ... End Select End WhileEnd With www.devleap.com

  8. XmlNodeType • I principali tipi di nodo che XmlTextReader gestisce sono: • ProcessingInstruction • Comment • Element • Attribute • Text • EndElement <?xml version=“1.0”?><!-- Commento --><rootattributo=“valore”>testo</root> www.devleap.com

  9. XmlDocument • E’ il buon vecchio  Document Object Model • Implementa il Livello 1 e 2 del DOM secondo le specifiche del W3C • Costruisce quindi un in-memory tree del documento anzichè farne una lettura forward-only read-only • Deve essere utilizzato per documenti piccoli in termini di dimensioni www.devleap.com

  10. DOM Document Recall • DOMDocument: classe principale che identifica un documento XML • Metodi principali: • Load(url/file) • LoadXML(string) • Save(file) • Create[Element/Attribute/...] • Proprietà principali: • documentElement • childNodes www.devleap.com

  11. DOM Node Recall • Metodi principali: • appendChild • removeChild • cloneNode • removeNode • Proprietà principali: • nextSibling • previousSibling • firstChild • lastChild • nodeType • nodeName • value www.devleap.com

  12. XmlNodeReader • Eredita da XmlReader • Carica il contenuto da un oggetto di tipo XmlNode Dim objXMLNodeReader As System.Xml.XmlNodeReaderDim objXMLDocument As XmlDocument()objXMLDocument.load ("C:\Ordine.XML")objXMLNodeReader = New XmlNodeReader(objXMLDocument)With objXMLNodeReader While .Read() Select Case .NodeType Case XmlNodeType.Element ... End Select End WhileEnd With www.devleap.com

  13. XmlTextReader via HTTP • Possiamo caricare documenti XML anche via HTTP tramite XmlTextReader • E se dobbiamo “presentarci” al server web che espone i contenuti ? • la proprietà XmlResolver ci permette di fornire una particolare identità al server Dim objXMLHTTPReader As System.Xml.XmlTextReader Dim objXMLResolver As New System.Xml.XmlUrlResolver() objXMLHTTPReader = New XmlTextReader("http://...")objXMLHTTPReader.XmlResolver = objXMLResolver objXMLResolver.Credentials = New _ System.Net.NetworkCredential(“User", “Pwd",“DOMAIN") .... www.devleap.com

  14. E SAX che fine ha fatto? • SAX = Simple API for XML • XmlReader sostituisce SAX/SAX2 in quanto le sue prestazioni sono migliori e quindi non è più necessario usare SAX • XmlReader è più semplice da utilizzare • Possiamo comunque ereditare XmlReader in una nostra classe e costruirci un SAX reader “fatto in casa” • Oppure possiamo utilizzare via COM-Interop MSXML e SAX www.devleap.com

  15. XmlWriter • E’ una classa astratta (MustOverride/abstract) • Come per XmlReader non possiamo istanziarla direttamente • Rappresenta un cursore in scrittura forward-only privo di caching • Produce documenti XML nel rispetto della specifica XML 1.0 del W3C www.devleap.com

  16. XmlTextWriter • Eredita da XmlWriter • Invia il suo output verso: • TextWriter, Stream, Stringhe • Metodi Principali: • WriteProcessingInstruction • WriteStartDocument • WriteStartElement • WriteAttributeString • WriteEndElement • WriteEndDocument www.devleap.com

  17. Esempio di XmlTextWriter Dim objXMLTextWriter As System.Xml.XmlTextWriter objXMLTextWriter = New XmlTextWriter(“file.xml", _ System.Text.Encoding.UTF8)With objXMLTextWriter.WriteStartDocument() .WriteStartElement("Ordine") .WriteStartElement("Cliente") .WriteAttributeString("idCliente", "PP2305") .WriteElementString("Nome", "Paolo") .WriteElementString("Cognome", "Pialorsi") ... .WriteEndElement() .WriteEndElement() .WriteEndDocument() .Close() End With www.devleap.com

  18. System.Xml.XPath • E’ il namespace del motore XPath • Permette di: • cercare/filtrare i contenuti di un documento XML • eseguire delle elaborazioni (somme, conteggi, ecc.) sul contenuto del documento XML • Può precompilare le regole/espressioni per ottimizzarne l’esecuzione www.devleap.com

  19. XPathDocument • Implementa IXPathNavigable • Rappresenta un oggetto documento ottimizzato per la ricerca e la navigazione tramite regole XPath • Lo utilizzeremo anche con XSLT • Possiamo costruirlo partendo da: • TextReader, Stream, Stringhe, XmlReader, File www.devleap.com

  20. XPathNavigator • E’ una classe astratta (MustOvveride/abstract) • Lo possiamo ottenere tramite il metodo CreateNavigator di un oggetto di tipo XPathDocument • Metodi più interessanti: • Compile: compila una regola XPath e restituisce un oggetto XPathExpression • Evaluate: valuta un’espressione XPath e ne restituisce il risultato • Select: restituisce un XPathIterator sulla base di una XPathExpression www.devleap.com

  21. XPathExpression ed XPathIterator Dim objXPathDocument As System.Xml.XPath.XPathDocument Dim objXPathNavigator As System.Xml.XPath.XPathNavigator Dim objXPathExpression As System.Xml.XPath.XPathExpression Dim objXPathNodeIterator As _ System.xml.XPath.XPathNodeIterator objXPathDocument = New XPathDocument("Ordini.XML") objXPathNavigator = objXPathDocument.CreateNavigator() With objXPathNavigator objXPathExpression = .Compile(strXPathRule) objXPathNodeIterator = .Select(objXPathExpression) With objXPathNodeIterator While .MoveNext() MsgBox(.Current.Value) End While End With End With www.devleap.com

  22. System.Xml.Xsl • Le classi principali di questo namespace sono: • XslTransform: trasforma del contenuto XML sulla base di una trasformazione XSL/XSLT • XsltArgumentList: permette di definire una lista di parametri da passare ad un XSLT parametrico www.devleap.com

  23. XslTransform • Supporta trasformazioni XSL-WD ed XSLT 1.0 • Per trasformare del contenuto XML occorre: • Istanziare un oggetto XslTransform • Caricare il documento XSLT con il metodo Load • Avere un XPathNavigator che contiene l’XML di partenza • Usare il metodo Transform dell’oggetto XslTransform fornendo come argomenti il documento XML di input,la destinazione della trasformazione e un XmlResolver (per motivi di sicurezza). • Possiamo trasformare verso: • XmlReader, Stringhe, Stream, TextReader www.devleap.com

  24. Esempio di XslTransform • Un situazione classica è la trasformazione all’interno di pagine web (ASPX) con la restituzione dell’output verso l’oggetto Response: Dim objXMLReader As System.Xml.XmlTextReader Dim objXPathDocument As System.Xml.XPath.XPathDocument Dim objXSLTDocument As System.Xml.Xsl.XslTransform objXMLReader = New XmlTextReader("Ordine.XML") objXPathDocument = New XPathDocument(objXMLReader) objXSLTDocument = New XslTransform() objXSLTDocument.Load("Ordine.XSLT") objXSLTDocument.Transform(objXPathDocument, Nothing, _ Response.Output, resolver) www.devleap.com

  25. XSLT Parametrici • Come in MSXML anche in System.XML è possibile eseguire trasformazioni parametriche alimentando una collection di parametri come se si lavorasse con una stored procedure parametrica • Il parametro che nella trasformazione precedente era Nothing ora conterrà la collection(XsltArgumentList) dei parametri da passare alla trasformazione XSLT www.devleap.com

  26. Esempio di XSLT Parametrico Dim objXPathDocument As System.Xml.XPath.XPathDocument Dim objXSLTDocument As System.Xml.Xsl.XslTransform Dim colArgList As New System.Xml.Xsl.XsltArgumentList() objXPathDocument = New XPathDocument("Ordine.XML") objXSLTDocument = New XslTransform() objXSLTDocument.Load("OrdineParametrico.XSLT") colArgList.AddParam(“NomePar1", “[NameSpaceURI]", Valore1) colArgList.AddParam(“NomePar2", “[NameSpaceURI]", Valore2) ... objXSLTDocument.Transform(objXPathDocument, colArgList, _ Response.Output) www.devleap.com

  27. XSLT “Automatici” in ASP.NET • Se dobbiamo trasformare XML tramite XSLT all’interno di pagine ASPX possiamo anche utilizzare un WebControl apposito: • System.Web.UI.WebControls.Xml • Accetta come proprietà: • DocumentSource: file XML sorgente • TransformSource: file XSLT sorgente • TransformArgumentList: collection di parametri • Esegue automaticamente la trasformazione e restituisce alla Response il risultato www.devleap.com

  28. System.Xml.Schema • Esiste un namespace appositamente pensato per la gestione (lettura, scrittura e validazione) degli Schema XSD • E’ costituito da 66 diverse classi corrispondenti ai vari blocchi informativi di uno schema XSD (element, complexType, annotation, ecc.) • E’ compatibile al 100% con la raccomandazione W3C del 2 Maggio 2001 • Possiamo costruire da codice degli XML Schema oppure caricare da file esterni gli schema ed applicarli ai documenti XML www.devleap.com

  29. Validazione di documenti XML • Esiste un XmlReader che valida durante la lettura: • System.Xml.XmlValidatingReader • Per funzionare richiede che vengano indicati: • ValidationType: XSD, XDR, DTD, Auto, None • Schemas: la collection degli Schema da utilizzare • Eventuali errori di validazione sono notificati tramite un evento ValidationEventHandler che ci fornisce la descrizione precisa dell’errore www.devleap.com

  30. ADO.NET ed XML • In ADO.NET il supporto ad XML non è più un’estensione come in ADO 2.x • XML e ADO.NET costituiscono un’architettura unica basata sulla rappresentazione nativa dei dati in formato XML • Oggi un DataSet: • può caricare e salvare nativamente dati in formato XML • permette di caricare o creare un XML Schema (XSD) partendo dai dati che contiene • può essere associato ad un XmlDataDocument che eredita da XmlDocument ed è quindi utilizzabile con: • System.Xml.Schema • System.Xml.Xsl.XslTransform • System.Xml.XPath www.devleap.com

  31. Generare XML da un DataSet Dim objDataAdapterAs New SqlDataAdapter(…) Dim objDataSet As New DataSet() objDataAdapter.Fill(objDataSet) ‘Restituiscono una stringa contenente il DataSet ‘in formato XML o lo Schema XSD dello stesso MsgBox(objDataSet.GetXml()) MsgBox(objDataSet.GetXmlSchema()) ‘Come i metodi precedenti ma scrivono dentro a Stream‘TextWrite, XmlWriter o Stringhe il contenuto XML MsgBox(objDataSet.WriteXml(destinazione, modalità)) MsgBox(objDataSet.WriteXmlSchema(destinazione, modalità)) www.devleap.com

  32. Leggere XML in un DataSet • Il metodo ReadXML legge da: • Stream, Stringhe, TextReader, XmlReader • Per “interpretare” la struttura dati può ragionare in uno dei seguenti modi (enumerazione XmlReadMode): • DiffGram: rilegge un documento XML generato con una chiamata a WriteXml(.., DiffGram) ed apporta le modifiche subite al DataSet • Fragment: legge documenti xml che hanno al loro interno (inline) uno schema XDR, per es. i dati esportati da SQL Server 2000 FOR XML • IgnoreSchema: legge i dati sulla base dell’attuale stato del DataSet, se non riesce ad associare qualche informazione alla struttura corrente, la ignora • InferSchema: costruisce/estende lo schema interno del DataSet sulla base dell’ “aspetto” dei dati ignorando eventuali Schema presenti nel documento • ReadSchema: si basa sullo schema presente nel documento e cerca di aggiungere le nuove informazioni al DataSet • Auto: 1) DiffGram, 2) ReadSchema, 3) InferSchema www.devleap.com

  33. ADO.NET System.Xml System.IO.Stream ASP.NET, System.XML, ADO.NET ASP.NET www.devleap.com

  34. Community • news.microsoft.com microsoft.public.it.dotnet.xml microsoft.public.it.dotnet.* • Comunità degli sviluppatori http://www.microsoft.com/italy/msdn/community/default.asp www.devleap.com

  35. MSDN Webcasts in italiano • Stay tuned: http://www.microsoft.com/italy/msdn/webcast/ • Prossimi WebCast su XML: Applicazioni reali di XML 2 Marzo 2004 dalle 14.30 alle 16.00 www.devleap.com

  36. Altre Informazioni • Dove posso ottenere maggiori informazioni • http://www.devleap.it/ • http://www.gotdotnet.com/ • http://www.microsoft.com/italy/msdn/ • Developer resources • Microsoft Visual Studio.NET • Microsoft .NET Framework SDK • Microsoft Developer Network www.devleap.com

  37. Introduzione ad XML I vostri feedback sono importanti • Scriveteci • Grazie della partecipazione • A presto • info@DevLeap.it www.devleap.com

More Related