WebCast XML e .NET Framework

Click here to load reader

  • date post

    19-Jan-2016
  • Category

    Documents

  • view

    30
  • download

    0

Embed Size (px)

description

WebCast XML e .NET Framework. Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT [email protected] Italian BLog: http://blogs.devleap.com/paolo.blog. Agenda. System.Xml XMLReader, XMLWriter, XMLDocument System.Xml.XPath XPathDocument, XPathNavigator, XPathExpression System.Xml.Xsl - PowerPoint PPT Presentation

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