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
Öffnen Sie Microsoft Visual Studio .NET. Erstellen Sie in Visual Basic .NET ein neues ASP.NET Webanwendungsprojekt mit dem Namen DateTimeXmlConvert.
Klicken Sie mit der rechten Maustaste auf die Designeroberfläche von WebForm1.aspx, und klicken Sie dann auf Code anzeigen.
Fügen Sie den folgenden Code am Ende des
ImportsDirektivenabschnitts in WebForm1.aspx.vb hinzu:Imports System.Xml Imports System.Text Imports System.Data.SqlClientFügen Sie den folgenden Code in das
Page_LoadEreignis 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()Speichern Sie die Änderungen an WebForm1.aspx.vb.
On the Build menu, click Build Solution.
Starten Sie Microsoft Internet Explorer, und öffnen Sie WebForm1.aspx, indem Sie die
http://IISServerName/DateTimeXmlConvert/WebForm1.aspxURL 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
Erstellen Sie ein neues Visual Basic .NET ASP.NET Webanwendungsprojekt mit dem Namen DateTimeXSLT.
Fügen Sie dem Projekt eine neue Klasse mit dem Namen "DateConvertor.vb" hinzu.
Ersetzen Sie den vorhandenen Code durch den folgenden Code in der
DateConvertorKlasse: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 ClassSpeichern Sie die Änderungen in DateConvertor.vb.
Klicken Sie mit der rechten Maustaste auf die Designeroberfläche von WebForm1.aspx, und klicken Sie dann auf Code anzeigen.
Fügen Sie den folgenden Code am Ende des
ImportsDirektivenabschnitts in WebForm1.aspx.vb hinzu:Imports System.IO Imports System.Xml Imports System.Xml.Xsl Imports System.Xml.XPath Imports System.Data.SqlClientFügen Sie den folgenden Code in das
Page_LoadEreignis 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)Speichern Sie die Änderungen an WebForm1.aspx.vb.
Erstellen eines XSLT-Beispieldokuments
Fügen Sie eine neue XSLT-Datei mit dem Namen "DateTime.xslt" zum Project "DateTimeXSLT ASP.NET Web" hinzu.
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>Speichern Sie die Änderungen in DateTime.xslt.
Testen der XSLT-Transformation mithilfe des ASP.NET Webformulars
- Speichern Sie die Änderungen am DateTimeXSLT-ASP.NET-Webprojekt.
- On the Build menu, click Build Solution.
- Starten Sie Internet Explorer, und öffnen Sie WebForm1.aspx, indem Sie die
http://IISServerName/DateTimeXSLT/WebForm1.aspxURL 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.