La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

WebCast XML e.NET Framework Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT Italian BLog:

Presentazioni simili


Presentazione sul tema: "WebCast XML e.NET Framework Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT Italian BLog:"— Transcript della presentazione:

1 WebCast XML e.NET Framework Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT Italian BLog:

2 Agenda System.XmlSystem.Xml XMLReader, XMLWriter, XMLDocumentXMLReader, XMLWriter, XMLDocument System.Xml.XPathSystem.Xml.XPath XPathDocument, XPathNavigator, XPathExpressionXPathDocument, XPathNavigator, XPathExpression System.Xml.XslSystem.Xml.Xsl XslTransformXslTransform System.Xml.SchemaSystem.Xml.Schema XmlSchema, XmlSchemaCollectionXmlSchema, XmlSchemaCollection XML con ASP.NET e ADO.NETXML con ASP.NET e ADO.NET

3 Scopo di questa sessione Capire come:Capire come: utilizzare i documenti XMLutilizzare i documenti XML sfruttare le tecnologie del mondo XMLsfruttare le tecnologie del mondo XML Allinterno di applicazioni realizzate con il.NET FrameworkAllinterno di applicazioni realizzate con il.NET Framework Avremo un approccio pratico, di quasi tutto vedremo il codice di esempioAvremo un approccio pratico, di quasi tutto vedremo il codice di esempio

4 System.XML Tecnologie e standard supportati:Tecnologie e standard supportati: XML, Namespaces, XSLT, XPath, XSD, Document Object ModelXML, Namespaces, XSLT, XPath, XSD, Document Object Model EstendibilitàEstendibilità si basa su classi astratte che si possono ereditaresi basa su classi astratte che si possono ereditare fornisce già delle classi di uso comune che ereditano dalle classi astrattefornisce già delle classi di uso comune che ereditano dalle classi astratte Incremento delle prestazioni rispetto ad MSXMLIncremento delle prestazioni rispetto ad MSXML Fortemente legato ad ADO.NETFortemente legato ad ADO.NET Non è unevoluzione di MSXMLNon è unevoluzione di MSXML E completamente diverso !E completamente diverso !

5 Classi astratte e implementazioni di base XmlTextWriter XmlReader XmlWriter XML 1.0 Namespaces Astratta XmlTextReaderXmlNodeReader

6 XMLReader E una classa astratta (MustOverride/abstract)E una classa astratta (MustOverride/abstract) Non possiamo quindi istanziarla direttamenteNon possiamo quindi istanziarla direttamente Rappresenta un cursore forward-only read-only privo di cachingRappresenta 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)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à PushFunziona in modalità Pull mentre SAX ragiona in modalità Push

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

8 XmlNodeType I principali tipi di nodo che XmlTextReader gestisce sono:I principali tipi di nodo che XmlTextReader gestisce sono: ProcessingInstructionProcessingInstruction CommentComment ElementElement AttributeAttribute TextText EndElementEndElement testo

9 XmlDocument E il buon vecchio Document Object ModelE il buon vecchio Document Object Model Implementa il Livello 1 e 2 del DOM secondo le specifiche del W3CImplementa 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-onlyCostruisce quindi un in-memory tree del documento anzichè farne una lettura forward-only read-only Deve essere utilizzato per documenti piccoli in termini di dimensioniDeve essere utilizzato per documenti piccoli in termini di dimensioni

10 DOM Document Recall DOMDocument: classe principale che identifica un documento XMLDOMDocument: classe principale che identifica un documento XML Metodi principali:Metodi principali: Load(url/file)Load(url/file) LoadXML(string)LoadXML(string) Save(file)Save(file) Create[Element/Attribute/...]Create[Element/Attribute/...] Proprietà principali:Proprietà principali: documentElementdocumentElement childNodeschildNodes

11 DOM Node Recall Metodi principali:Metodi principali: appendChildappendChild removeChildremoveChild cloneNodecloneNode removeNoderemoveNode Proprietà principali:Proprietà principali: nextSiblingnextSibling previousSiblingpreviousSibling firstChildfirstChild lastChildlastChild nodeTypenodeType nodeNamenodeName valuevalue

12 XmlNodeReader Eredita da XmlReaderEredita da XmlReader Carica il contenuto da un oggetto di tipo XmlNodeCarica il contenuto da un oggetto di tipo XmlNode Dim objXMLNodeReader As System.Xml.XmlNodeReader Dim 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 While End With

13 XmlTextReader via HTTP Possiamo caricare documenti XML anche via HTTP tramite XmlTextReaderPossiamo caricare documenti XML anche via HTTP tramite XmlTextReader E se dobbiamo presentarci al server web che espone i contenuti ?E se dobbiamo presentarci al server web che espone i contenuti ? la proprietà XmlResolver ci permette di fornire una particolare identità al serverla 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")....

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

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

16 XmlTextWriter Eredita da XmlWriterEredita da XmlWriter Invia il suo output verso:Invia il suo output verso: TextWriter, Stream, StringheTextWriter, Stream, Stringhe Metodi Principali:Metodi Principali: WriteProcessingInstructionWriteProcessingInstruction WriteStartDocumentWriteStartDocument WriteStartElementWriteStartElement WriteAttributeStringWriteAttributeString WriteEndElementWriteEndElement WriteEndDocumentWriteEndDocument

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().WriteEndDocument().Close() End With

18 System.Xml.XPath E il namespace del motore XPathE il namespace del motore XPath Permette di:Permette di: cercare/filtrare i contenuti di un documento XMLcercare/filtrare i contenuti di un documento XML eseguire delle elaborazioni (somme, conteggi, ecc.) sul contenuto del documento XMLeseguire delle elaborazioni (somme, conteggi, ecc.) sul contenuto del documento XML Può precompilare le regole/espressioni per ottimizzarne lesecuzionePuò precompilare le regole/espressioni per ottimizzarne lesecuzione

19 XPathDocument Implementa IXPathNavigableImplementa IXPathNavigable Rappresenta un oggetto documento ottimizzato per la ricerca e la navigazione tramite regole XPathRappresenta un oggetto documento ottimizzato per la ricerca e la navigazione tramite regole XPath Lo utilizzeremo anche con XSLTLo utilizzeremo anche con XSLT Possiamo costruirlo partendo da:Possiamo costruirlo partendo da: TextReader, Stream, Stringhe, XmlReader, FileTextReader, Stream, Stringhe, XmlReader, File

20 XPathNavigator E una classe astratta (MustOvveride/abstract)E una classe astratta (MustOvveride/abstract) Lo possiamo ottenere tramite il metodo CreateNavigator di un oggetto di tipo XPathDocumentLo possiamo ottenere tramite il metodo CreateNavigator di un oggetto di tipo XPathDocument Metodi più interessanti:Metodi più interessanti: Compile: compila una regola XPath e restituisce un oggetto XPathExpressionCompile: compila una regola XPath e restituisce un oggetto XPathExpression Evaluate: valuta unespressione XPath e ne restituisce il risultatoEvaluate: valuta unespressione XPath e ne restituisce il risultato Select: restituisce un XPathIterator sulla base di una XPathExpressionSelect: restituisce un XPathIterator sulla base di una XPathExpression

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

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

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

24 Esempio di XslTransform Un situazione classica è la trasformazione allinterno di pagine web (ASPX) con la restituzione delloutput verso loggetto Response:Un situazione classica è la trasformazione allinterno di pagine web (ASPX) con la restituzione delloutput verso loggetto 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)

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 parametricaCome 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 XSLTIl parametro che nella trasformazione precedente era Nothing ora conterrà la collection(XsltArgumentList) dei parametri da passare alla trasformazione XSLT

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)

27 XSLT Automatici in ASP.NET Se dobbiamo trasformare XML tramite XSLT allinterno di pagine ASPX possiamo anche utilizzare un WebControl apposito:Se dobbiamo trasformare XML tramite XSLT allinterno di pagine ASPX possiamo anche utilizzare un WebControl apposito: System.Web.UI.WebControls.XmlSystem.Web.UI.WebControls.Xml Accetta come proprietà:Accetta come proprietà: DocumentSource: file XML sorgenteDocumentSource: file XML sorgente TransformSource: file XSLT sorgenteTransformSource: file XSLT sorgente TransformArgumentList: collection di parametriTransformArgumentList: collection di parametri Esegue automaticamente la trasformazione e restituisce alla Response il risultatoEsegue automaticamente la trasformazione e restituisce alla Response il risultato

28 System.Xml.Schema Esiste un namespace appositamente pensato per la gestione (lettura, scrittura e validazione) degli Schema XSDEsiste 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 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 2001E 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 XMLPossiamo costruire da codice degli XML Schema oppure caricare da file esterni gli schema ed applicarli ai documenti XML

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

30 ADO.NET ed XML In ADO.NET il supporto ad XML non è più unestensione come in ADO 2.xIn ADO.NET il supporto ad XML non è più unestensione come in ADO 2.x XML e ADO.NET costituiscono unarchitettura unica basata sulla rappresentazione nativa dei dati in formato XMLXML e ADO.NET costituiscono unarchitettura unica basata sulla rappresentazione nativa dei dati in formato XML Oggi un DataSet:Oggi un DataSet: può caricare e salvare nativamente dati in formato XMLpuò caricare e salvare nativamente dati in formato XML permette di caricare o creare un XML Schema (XSD) partendo dai dati che contienepermette 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:può essere associato ad un XmlDataDocument che eredita da XmlDocument ed è quindi utilizzabile con: System.Xml.SchemaSystem.Xml.Schema System.Xml.Xsl.XslTransformSystem.Xml.Xsl.XslTransform System.Xml.XPathSystem.Xml.XPath

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à))

32 Leggere XML in un DataSet Il metodo ReadXML legge da:Il metodo ReadXML legge da: Stream, Stringhe, TextReader, XmlReaderStream, Stringhe, TextReader, XmlReader Per interpretare la struttura dati può ragionare in uno dei seguenti modi (enumerazione XmlReadMode):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 DataSetDiffGram: 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 XMLFragment: 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 dellattuale stato del DataSet, se non riesce ad associare qualche informazione alla struttura corrente, la ignoraIgnoreSchema: legge i dati sulla base dellattuale 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 documentoInferSchema: 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 DataSetReadSchema: si basa sullo schema presente nel documento e cerca di aggiungere le nuove informazioni al DataSet Auto: 1) DiffGram, 2) ReadSchema, 3) InferSchemaAuto: 1) DiffGram, 2) ReadSchema, 3) InferSchema

33 ASP.NET, System.XML, ADO.NET ADO.NET ASP.NET System.Xml System.IO.Stream

34 Community news.microsoft.comnews.microsoft.commicrosoft.public.it.dotnet.xmlmicrosoft.public.it.dotnet.* Comunità degli sviluppatoriComunità degli sviluppatorihttp://www.microsoft.com/italy/msdn/community/default.asp

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

36 Altre Informazioni Dove posso ottenere maggiori informazioniDove posso ottenere maggiori informazioni Developer resourcesDeveloper resources Microsoft Visual Studio.NETMicrosoft Visual Studio.NET Microsoft.NET Framework SDKMicrosoft.NET Framework SDK Microsoft Developer NetworkMicrosoft Developer Network

37 Introduzione ad XML I vostri feedback sono importanti ScriveteciScriveteci Grazie della partecipazione –A presto


Scaricare ppt "WebCast XML e.NET Framework Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT Italian BLog:"

Presentazioni simili


Annunci Google