Formatieren von DateTime- und Date-Werten in dem XML-Code, der mithilfe Visual Basic .NET aus einem ADO.NET DataSet extrahiert wurde

In diesem Artikel wird beschrieben, wie Spalten DateTime Date im DataTable XML-Code formatiert und wertet werden, die aus einem DataSet ADO.NET-Objekt extrahiert werden.

Ursprüngliche Produktversion:   Visual Basic .NET
Ursprüngliche KB-Nummer:   811767

Zusammenfassung

In ADO.NET werden die DateTime Date Werte von Spalten in DataTable XSD geschrieben DateTime und Date formatiert, wenn sie DataSet als XML gespeichert werden. Die Standard-XSD DateTime und Date -Formate sind CCYY-MM-DDThh:mm:ss bzw. CCYY-MM-DD, da das zugrunde liegende XSD-Schema der Datenbank den Datentypen und den DataSet DateTime Date DateTime XSD-Datentypen die Spalten der Datenbank zuordbart. Date

Verwenden Sie eine der folgenden Methoden, um XML zu generieren, wo DateTime und welche Werte in den erforderlichen Date benutzerdefinierten Formaten dargestellt werden.

Methode 1: Verwenden der XmlConvert-Klasse

  1. Öffnen Sie Microsoft Visual Studio .NET. Erstellen Sie in Visual Basic .NET ein neues ASP.NET Webanwendungsprojekt mit dem Namen DateTimeXmlConvert.

  2. Klicken Sie mit der rechten Maustaste auf die Designeroberfläche von WebForm1.aspx, und klicken Sie dann auf Code anzeigen.

  3. Fügen Sie den folgenden Code am Ende des Imports Direktivenabschnitts in WebForm1.aspx.vb hinzu:

    Imports System.Xml
    Imports System.Text
    Imports System.Data.SqlClient
    
  4. Fügen Sie den folgenden Code in das Page_Load Ereignis ein:

    ' 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. Speichern Sie die Änderungen an WebForm1.aspx.vb.

  6. On the Build menu, click Build Solution.

  7. Starten Sie Microsoft Internet Explorer, und öffnen Sie WebForm1.aspx, indem Sie die http://IISServerName/DateTimeXmlConvert/WebForm1.aspx URL angeben, wobei IISServerName der Name ihres Microsoft-Internetinformationsdienste-Servers (IIS) ist.

Sie können nun sehen, dass die im Browser gerenderte XML-Datei im benutzerdefinierten Format angezeigt DateTime wird.

Methode 2: Anwenden einer XSLT-Transformation auf die XML-Darstellung von DataSet-Daten

Sie können Inlineskriptblöcke und externe Codekomponenten, die als XSLT-Erweiterungsobjekte bezeichnet werden, verwenden, um benutzerdefinierte Routinen zu implementieren. Diese werden während einer XSLT aufgerufen, um Berechnungen durchzuführen und Daten zu verarbeiten. Microsoft empfiehlt, die Verwendung von Inlineskriptblöcken zu vermeiden. Sie können Erweiterungsobjekte verwenden, um benutzerdefinierte Routinen zu implementieren, wenn Sie tragbare XSLT-Stylesheets entwerfen.

Erstellen eines ASP.NET Webformulars

  1. Erstellen Sie ein neues Visual Basic .NET ASP.NET Webanwendungsprojekt mit dem Namen DateTimeXSLT.

  2. Fügen Sie dem Projekt eine neue Klasse mit dem Namen "DateConvertor.vb" hinzu.

  3. Ersetzen Sie den vorhandenen Code durch den folgenden Code in der DateConvertor Klasse:

    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. Speichern Sie die Änderungen in DateConvertor.vb.

  5. Klicken Sie mit der rechten Maustaste auf die Designeroberfläche von WebForm1.aspx, und klicken Sie dann auf Code anzeigen.

  6. Fügen Sie den folgenden Code am Ende des Imports Direktivenabschnitts in WebForm1.aspx.vb hinzu:

    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Xsl
    Imports System.Xml.XPath
    Imports System.Data.SqlClient
    
  7. Fügen Sie den folgenden Code in das Page_Load Ereignis ein:

    ' 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. Speichern Sie die Änderungen an WebForm1.aspx.vb.

Erstellen eines XSLT-Beispieldokuments

  1. Fügen Sie eine neue XSLT-Datei mit dem Namen "DateTime.xslt" zum Project "DateTimeXSLT ASP.NET Web" hinzu.

  2. Ersetzen Sie den generierten Code durch den folgenden Code. (Verwenden Sie Editor als Zwischentool, wenn beim Einfügen des folgenden Codes Codierungs- oder Zeichenprobleme auftreten.)

    <?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. Speichern Sie die Änderungen in DateTime.xslt.

Testen der XSLT-Transformation mithilfe des ASP.NET Webformulars

  1. Speichern Sie die Änderungen am DateTimeXSLT-ASP.NET-Webprojekt.
  2. On the Build menu, click Build Solution.
  3. Starten Sie Internet Explorer, und öffnen Sie WebForm1.aspx, indem Sie die http://IISServerName/DateTimeXSLT/WebForm1.aspx URL angeben, wobei IISServerName der Name Des IIS-Servers ist.

Sie können nun sehen, dass zwei DateTime Formate, das DateTime Format von DataSet und das transformierte DateTime Format auf der WebForm1.aspx-Seite.