WebCast XML e .NET Framework
date post
19-Jan-2016Category
Documents
view
30download
0
Embed Size (px)
description
Transcript of WebCast XML e .NET Framework
AgendaSystem.XmlXMLReader, XMLWriter, XMLDocument
System.Xml.XPathXPathDocument, XPathNavigator, XPathExpression
System.Xml.XslXslTransform
System.Xml.SchemaXmlSchema, XmlSchemaCollection
XML con ASP.NET e ADO.NET
Scopo di questa sessioneCapire come:utilizzare i documenti XMLsfruttare le tecnologie del mondo XML
Allinterno di applicazioni realizzate con il .NET Framework
Avremo un approccio pratico, di quasi tutto vedremo il codice di esempio
System.XMLTecnologie e standard supportati:XML, Namespaces, XSLT, XPath, XSD, Document Object ModelEstendibilitsi basa su classi astratte che si possono ereditarefornisce gi delle classi di uso comune che ereditano dalle classi astratteIncremento delle prestazioni rispetto ad MSXMLFortemente legato ad ADO.NETNon unevoluzione di MSXMLE completamente diverso !
Classi astratte eimplementazioni di base
XMLReaderE 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
XmlTextReaderEredita da XmlReaderPu caricare il contenuto di:TextReader, Stream, Stringhe, Url, FileImports 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
XmlNodeTypeI principali tipi di nodo che XmlTextReader gestisce sono:ProcessingInstruction CommentElementAttributeTextEndElement
testo
XmlDocumentE 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
DOM Document RecallDOMDocument: classe principale che identifica un documento XML
Metodi principali:Load(url/file)LoadXML(string)Save(file)Create[Element/Attribute/...]
Propriet principali:documentElementchildNodes
DOM Node RecallMetodi principali:appendChildremoveChildcloneNoderemoveNode
Propriet principali:nextSiblingpreviousSiblingfirstChildlastChildnodeTypenodeNamevalue
XmlNodeReaderEredita da XmlReaderCarica il contenuto da un oggetto di tipo XmlNodeDim 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
XmlTextReader via HTTPPossiamo 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 serverDim objXMLHTTPReader As System.Xml.XmlTextReaderDim objXMLResolver As New System.Xml.XmlUrlResolver()objXMLHTTPReader = New XmlTextReader("http://...") objXMLHTTPReader.XmlResolver = objXMLResolverobjXMLResolver.Credentials = New _ System.Net.NetworkCredential(User", Pwd",DOMAIN")....
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
XmlWriterE 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
XmlTextWriterEredita da XmlWriter
Invia il suo output verso:TextWriter, Stream, Stringhe
Metodi Principali:WriteProcessingInstructionWriteStartDocumentWriteStartElementWriteAttributeStringWriteEndElementWriteEndDocument
Esempio di XmlTextWriterDim 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
System.Xml.XPathE il namespace del motore XPath
Permette di:cercare/filtrare i contenuti di un documento XMLeseguire delle elaborazioni (somme, conteggi, ecc.) sul contenuto del documento XML
Pu precompilare le regole/espressioni per ottimizzarne lesecuzione
XPathDocumentImplementa 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
XPathNavigatorE 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 XPathExpressionEvaluate: valuta unespressione XPath e ne restituisce il risultatoSelect: restituisce un XPathIterator sulla base di una XPathExpression
XPathExpression ed XPathIteratorDim objXPathDocument As System.Xml.XPath.XPathDocumentDim objXPathNavigator As System.Xml.XPath.XPathNavigatorDim objXPathExpression As System.Xml.XPath.XPathExpressionDim objXPathNodeIterator As _ System.xml.XPath.XPathNodeIterator
objXPathDocument = New XPathDocument("Ordini.XML")objXPathNavigator = objXPathDocument.CreateNavigator() With objXPathNavigatorobjXPathExpression = .Compile(strXPathRule)objXPathNodeIterator = .Select(objXPathExpression)With objXPathNodeIteratorWhile .MoveNext() MsgBox(.Current.Value)End WhileEnd WithEnd With
System.Xml.XslLe 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
XslTransformSupporta trasformazioni XSL-WD ed XSLT 1.0
Per trasformare del contenuto XML occorre:Istanziare un oggetto XslTransformCaricare il documento XSLT con il metodo LoadAvere un XPathNavigator che contiene lXML di partenzaUsare 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:XmlReader, Stringhe, Stream, TextReader
Esempio di XslTransformUn situazione classica la trasformazione allinterno di pagine web (ASPX) con la restituzione delloutput verso loggetto Response:Dim objXMLReader As System.Xml.XmlTextReaderDim objXPathDocument As System.Xml.XPath.XPathDocumentDim 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)
XSLT ParametriciCome 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
Esempio di XSLT ParametricoDim objXPathDocument As System.Xml.XPath.XPathDocumentDim objXSLTDocument As System.Xml.Xsl.XslTransformDim 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)
XSLT Automatici in ASP.NETSe dobbiamo trasformare XML tramite XSLT allinterno di pagine ASPX possiamo anche utilizzare un WebControl apposito:System.Web.UI.WebControls.Xml
Accetta come propriet:DocumentSource: file XML sorgenteTransformSource: file XSLT sorgenteTransformArgumentList: collection di parametri
Esegue automaticamente la trasformazione e restituisce alla Response il risultato
System.Xml.SchemaEsiste 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
Validazione di documenti XMLEsiste un XmlReader che valida durante la lettura:System.Xml.XmlValidatingReader
Per funzionare richiede che vengano indicati:ValidationType: XSD, XDR, DTD, Auto, NoneSchemas: la collection degli Schema da utilizzare
Eventuali errori di