Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 DateTime
Date
spalten den Datentypen und XSD Date
zugeordnet DateTime
Date
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
Ö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
Imports
Direktivenabschnitts in WebForm1.aspx.vb hinzu:Imports System.Xml Imports System.Text Imports System.Data.SqlClient
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()
Speichern Sie die Änderungen an WebForm1.aspx.vb.
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
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
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
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
Speichern Sie die Änderungen an 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
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
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)
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 DateTimeXSLT-ASP.NET Webprojekt 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 an "DateTime.xslt".
Testen der XSLT-Transformation mithilfe des ASP.NET-Webformulars
- Speichern Sie die Änderungen am DateTimeXSLT-ASP.NET Webprojekt.
- Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
- 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.