Freigeben über


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

In diesem Artikel wird beschrieben, wie Sie Spalten in der XML formatieren DateTime und Date werte DataTable , die aus einem ADO.NET-Objekt DataSet extrahiert werden.

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

Zusammenfassung

In ADO.NET werden die DateTime Spalten und Date Werte DataTable in XSD DateTime und Date Formaten geschrieben, wenn sie DataSet als XML gespeichert werden. Die Standardmäßigen XSD DateTime und Formate sind CCYY-MM-DDThh:mm:ss bzw. CCYY-MM-DD, da das zugrunde liegende XSD-Schema der DataSet Datenbank und DateTimeDate spalten den Datentypen und XSD Date zugeordnet DateTimeDate ist.

Verwenden Sie eine der folgenden Methoden, um XML zu generieren, wo DateTime und Date welche Werte in den erforderlichen 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. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  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 (IIS)-Servers ist.

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

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

Sie können Inlineskriptblöcke und externe Codekomponenten verwenden, die als XSLT-Erweiterungsobjekte bezeichnet werden, 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 portable 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 an 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 DateTimeXSLT-ASP.NET Webprojekt 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 an "DateTime.xslt".

Testen der XSLT-Transformation mithilfe des ASP.NET-Webformulars

  1. Speichern Sie die Änderungen am DateTimeXSLT-ASP.NET Webprojekt.
  2. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
  3. Starten Sie Internet Explorer, und öffnen Sie WebForm1.aspx , indem Sie die http://IISServerName/DateTimeXSLT/WebForm1.aspx URL angeben, wobei IISServerName der Name Ihres IIS-Servers ist.

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