Cómo dar formato a los valores DateTime y Date en el XML extraído de un ADO.NET DataSet mediante Visual Basic .NET
En este artículo se describe cómo dar formato DateTime
y los valores de DataTable
las columnas en el XML que se extrae de un objeto ADO.NET DataSet
Date
.
Versión original del producto: Visual Basic .NET
Número de KB original: 811767
Resumen
En ADO.NET, los DateTime
valores y Date
de DataTable
las columnas se escriben en el XSD DateTime
y Date
los formatos cuando DataSet
se guarda como XML. Los formatos y XSD DateTime
estándar son CCYY-MM-DDThh:mm:ss y CCYY-MM-DD, respectivamente, porque el esquema XSD subyacente de asigna DataSet
las DateTime
columnas y Date
de la base de datos a los DateTime
tipos de datos XSD Date
Date
y .
Para generar XML donde DateTime
y Date
los valores se representan en los formatos personalizados necesarios, use uno de los métodos siguientes.
Método 1: Usar la clase XmlConvert
Abra Microsoft Visual Studio .NET. En Visual Basic .NET, cree un nuevo proyecto de aplicación web ASP.NET denominado DateTimeXmlConvert.
Haga clic con el botón derecho en la superficie del diseñador de WebForm1.aspx y, a continuación, haga clic en Ver código.
Agregue el código siguiente al final de la sección de
Imports
directivas en WebForm1.aspx.vb:Imports System.Xml Imports System.Text Imports System.Data.SqlClient
Pegue el código siguiente en el
Page_Load
evento:' 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()
Guarde los cambios en WebForm1.aspx.vb.
On the Build menu, click Build Solution.
Inicie Microsoft Internet Explorer y abra WebForm1.aspx especificando la
http://IISServerName/DateTimeXmlConvert/WebForm1.aspx
dirección URL, donde IISServerName es el nombre del servidor de Microsoft Internet Information Services (IIS).
Ahora puede ver que el archivo XML que se representa en el explorador se muestra en formato personalizado DateTime
.
Método 2: Aplicar una transformación XSLT en la representación XML de los datos de DataSet
Puede usar bloques de script insertados y componentes de código externo, conocidos como objetos de extensión XSLT, para implementar rutinas personalizadas. Se invocan durante una XSLT para realizar cálculos y procesar datos. Microsoft recomienda evitar el uso de bloques de script insertados. Puede usar objetos de extensión para implementar rutinas personalizadas al diseñar hojas de estilos XSLT portátiles.
Creación de un formulario web de ASP.NET
Cree un nuevo proyecto de aplicación web de .NET de Visual Basic ASP.NET denominado DateTimeXSLT.
Agregue una nueva clase denominada DateConvertor.vb al proyecto.
Reemplace el código existente por el código siguiente en la
DateConvertor
clase :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
Guarde los cambios en DateConvertor.vb.
Haga clic con el botón derecho en la superficie del diseñador de WebForm1.aspx y, a continuación, haga clic en Ver código.
Agregue el código siguiente al final de la sección de
Imports
directivas en WebForm1.aspx.vb:Imports System.IO Imports System.Xml Imports System.Xml.Xsl Imports System.Xml.XPath Imports System.Data.SqlClient
Pegue el código siguiente en el
Page_Load
evento:' 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)
Guarde los cambios en WebForm1.aspx.vb.
Creación de un documento XSLT de ejemplo
Agregue un nuevo archivo XSLT denominado DateTime.xslt al proyecto web de ASP.NET DateTimeXSLT.
Reemplace el código generado por el código siguiente. (Use el Bloc de notas como herramienta intermediaria si experimenta problemas de codificación o caracteres al intentar pegar el código siguiente).
<?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>
Guarde los cambios en DateTime.xslt.
Prueba de la transformación XSLT mediante el formulario web de ASP.NET
- Guarde los cambios en el proyecto web de ASP.NET DateTimeXSLT.
- On the Build menu, click Build Solution.
- Inicie Internet Explorer y abra WebForm1.aspx especificando la
http://IISServerName/DateTimeXSLT/WebForm1.aspx
dirección URL, donde IISServerName es el nombre del servidor IIS.
Ahora puede ver que dos DateTime
formatos, el DateTime
formato de DataSet y el formato transformado DateTime
en la página WebForm1.aspx .
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de