Partager via


Mise en forme des valeurs DateTime et Date dans le code XML extraits d’un jeu de données ADO.NET à l’aide de Visual Basic .NET

Cet article explique comment mettre en forme et mettre en forme DateTime des valeurs de DataTable colonnes dans le code XML extrait d’un objet ADO.NET DataSetDate.

Version du produit d’origine : Visual Basic .NET
Numéro de base de connaissances d’origine : 811767

Résumé

Dans ADO.NET, les DateTime valeurs et Date valeurs des DataTable colonnes sont écrites dans le XSD DateTime et Date les formats lorsque l’objet DataSet est enregistré au format XML. Les formats XSD et XSD DateTime standard sont CCYY-MM-DDThh :mm :ss et CCYY-MM-DD, respectivement, car le schéma XSD sous-jacent des mappages et DateDateTime colonnes de DataSet la base de données aux DateTime types de données XSD et XSDDate.Date

Pour générer des données XML où DateTime et Date des valeurs sont représentées dans les formats personnalisés requis, utilisez l’une des méthodes suivantes.

Méthode 1 : Utiliser la classe XmlConvert

  1. Ouvrez Microsoft Visual Studio .NET. Dans Visual Basic .NET, créez un projet d’application web ASP.NET nommé DateTimeXmlConvert.

  2. Cliquez avec le bouton droit sur l’aire du concepteur de WebForm1.aspx, puis cliquez sur Afficher le code.

  3. Ajoutez le code suivant à la section fin des Imports directives dans WebForm1.aspx.vb :

    Imports System.Xml
    Imports System.Text
    Imports System.Data.SqlClient
    
  4. Collez le code suivant dans l’événement Page_Load :

    ' Change SqlServerName, UserId and Password in the following connection string.
    Dim conn As String = "Server=<SQLServerName>; database=Northwind; user id=<UserID>; password=<Password>;"
    Dim connection As SqlConnection = New SqlConnection()
    connection.ConnectionString = conn
    
    Dim objDataSet As DataSet = New DataSet()
    Dim objAdapter As SqlDataAdapter = New SqlDataAdapter()
    Dim objCmd As SqlCommand = New SqlCommand()' Retrieve the first 10 records from the employees table.
    objCmd.CommandText = "select top 10 FirstName,BirthDate from employees"
    objCmd.Connection = connection
    objAdapter.SelectCommand = objCmd
    objAdapter.Fill(objDataSet)
    
    connection.Close()' Create an instance of XmlTextReader class that reads the XML data.
    Dim xmlReader As XmlTextReader = New XmlTextReader(objDataSet.GetXml(),XmlNodeType.Element,Nothing)
    
    Response.ContentType = "text/xml"
    Dim xmlWriter As XmlTextWriter = New XmlTextWriter(Response.OutputStream,Encoding.UTF8)
    xmlWriter.Indentation = 4
    xmlWriter.WriteStartDocument()
    Dim elementName As String = ""
    
    ' Parse & display each node
    While xmlReader.Read()
        Select Case xmlReader.NodeType
            Case XmlNodeType.Element
                xmlWriter.WriteStartElement(xmlReader.Name)
                elementName = xmlReader.Name
    
            Case XmlNodeType.Text
                If elementName.ToLower() = "birthdate" Then
                    xmlWriter.WriteString(XmlConvert.ToDateTime(xmlReader.Value).ToString())
                Else
                    xmlWriter.WriteString(xmlReader.Value)
                End If
    
            Case XmlNodeType.EndElement
                xmlWriter.WriteEndElement()
        End Select
    End While
    xmlWriter.Close()
    
  5. Enregistrez les modifications apportées à WebForm1.aspx.vb.

  6. Dans le menu Générer , cliquez sur Générer la solution.

  7. Démarrez Microsoft Internet Explorer et ouvrez WebForm1.aspx en spécifiant l’URL http://IISServerName/DateTimeXmlConvert/WebForm1.aspx , où IISServerName est le nom de votre serveur Microsoft Internet Information Services (IIS).

Vous pouvez maintenant voir que le fichier XML affiché dans le navigateur s’affiche au format personnalisé DateTime .

Méthode 2 : Appliquer une transformation XSLT sur la représentation XML des données DataSet

Vous pouvez utiliser des blocs de script inline et des composants de code externe, appelés objets d’extension XSLT, pour implémenter des routines personnalisées. Celles-ci sont appelées pendant un XSLT pour effectuer des calculs et traiter des données. Microsoft vous recommande d’éviter d’utiliser des blocs de script inline. Vous pouvez utiliser des objets d’extension pour implémenter des routines personnalisées lorsque vous concevez des feuilles de style XSLT portables.

Créer un formulaire web ASP.NET

  1. Créez un projet d’application web Visual Basic .NET ASP.NET nommé DateTimeXSLT.

  2. Ajoutez une nouvelle classe nommée DateConvertor.vb au projet.

  3. Remplacez le code existant par le code suivant dans la DateConvertor classe :

    Public Class DateConvertor
        Public Function GetDateTime(ByVal data As String, ByVal format As String) As String
            Dim dt As DateTime = DateTime.Parse(data)
            Return dt.ToString(format)
        End Function
    End Class
    
  4. Enregistrez les modifications apportées à DateConvertor.vb.

  5. Cliquez avec le bouton droit sur l’aire du concepteur de WebForm1.aspx, puis cliquez sur Afficher le code.

  6. Ajoutez le code suivant à la section fin des Imports directives dans WebForm1.aspx.vb :

    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Xsl
    Imports System.Xml.XPath
    Imports System.Data.SqlClient
    
  7. Collez le code suivant dans l’événement Page_Load :

    ' Change SqlServerName, UserId and Password in the following connection string.
    Dim strConn As String = "Server=<SQLServerName>; database=Northwind; user id=<UserID>; password=<Password>;"
    Dim connection As SqlConnection = New SqlConnection()
    connection.ConnectionString = strConn
    
    Dim objDataSet As DataSet = New DataSet()
    Dim objAdapter As SqlDataAdapter = New SqlDataAdapter()
    Dim objCmd As SqlCommand = New SqlCommand()' Retrieve all records from employees table.
    objCmd.CommandText = "select FirstName,BirthDate from employees"
    objCmd.Connection = connection
    objAdapter.SelectCommand = objCmd
    objAdapter.Fill(objDataSet)
    
    connection.Close()' Create an instance of StringReader class that reads the XML data.
    Dim reader As StringReader = New StringReader(objDataSet.GetXml())
    Dim doc As XPathDocument = New XPathDocument(reader)' Create an XslTransform object and load xslt file.
    Dim transform As XslTransform = New XslTransform()
    transform.Load(Me.MapPath("DateTime.xslt"))'Add an object to convert DateTime format.
    Dim objDateConvertor As DateConvertor = New DateConvertor()
    Dim args As XsltArgumentList = New XsltArgumentList()
    args.AddExtensionObject("urn:ms-kb", objDateConvertor)
    
    transform.Transform(doc, args, Response.OutputStream)
    
  8. Enregistrez les modifications apportées à WebForm1.aspx.vb.

Créer un exemple de document XSLT

  1. Ajoutez un nouveau fichier XSLT nommé DateTime.xslt au projet Web DateTimeXSLT ASP.NET.

  2. Remplacez le code généré par le code suivant. (Utilisez le Bloc-notes comme outil intermédiaire si vous rencontrez des problèmes d’encodage ou de caractère lorsque vous essayez de coller le code suivant.)

    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:myObj="urn:ms-kb">
        <xsl:template match="NewDataSet">
            <table>
                <xsl:attribute name="border">1</xsl:attribute>
                  <TR>
                      <TD>Employee name</TD>
                      <TD>Original DateTime Format</TD>
                      <TD>Changed DateTime Format</TD>
                  </TR>
                <xsl:apply-templates select="*"/>
            </table>
        </xsl:template>
        <xsl:template match="*">
            <TR>
                <xsl:apply-templates select="*"/>
            </TR>
        </xsl:template>
        <xsl:template match="FirstName">
            <TD>
                <xsl:value-of select="."/>
            </TD>
        </xsl:template>
        <xsl:template match="BirthDate">
        <xsl:variable name="Date" select="."/>
            <TD>
                <xsl:value-of select="$Date"/>
            </TD>
            <TD>
                <xsl:value-of select="myObj:GetDateTime($Date, 'F')"/>
            </TD>
        </xsl:template>
    </xsl:stylesheet>
    
  3. Enregistrez les modifications apportées à DateTime.xslt.

Tester la transformation XSLT à l’aide du formulaire web ASP.NET

  1. Enregistrez les modifications apportées au projet web DateTimeXSLT ASP.NET.
  2. Dans le menu Générer , cliquez sur Générer la solution.
  3. Démarrez Internet Explorer et ouvrez WebForm1.aspx en spécifiant l’URL http://IISServerName/DateTimeXSLT/WebForm1.aspx , où IISServerName est le nom de votre serveur IIS.

Vous pouvez maintenant voir que deux DateTime formats, le DateTime format de DataSet et le format transformé DateTime sur la page WebForm1.aspx .