Cómo dar formato a los valores DateTime y Date en el XML extraído de ADO.NET DataSet mediante Visual Basic .NET
En este artículo se describe cómo dar formato y valores a las columnas del XML que se extrae DateTime Date de un ADO.NET DataTable DataSet objeto.
Versión del producto original: Visual Basic .NET
Número KB original: 811767
Resumen
En ADO.NET, los valores y de las columnas se escriben en xsd y DateTime Date DataTable DateTime Date formatos cuando se DataSet guarda como XML. El XSD estándar y los formatos son DateTime Date CCYY-MM-DDThh:mm:ss y CCYY-MM-DD, respectivamente, porque el esquema XSD subyacente de las columnas y asigna las columnas de la base de datos a los tipos de datos XSD y DataSet DateTime Date DateTime Date y.
Para generar XML donde DateTime y los valores se representan en los Date formatos personalizados necesarios, use uno de los métodos siguientes.
Método 1: Usar clase XmlConvert
Abra Microsoft Visual Studio .NET. En Visual Basic .NET, cree un nuevo proyecto ASP.NET aplicación web denominado DateTimeXmlConvert.
Haga clic con el botón secundario en la superficie del diseñador de WebForm1.aspx y, a continuación, haga clic en Ver código.
Agregue el siguiente código al final de la sección de directivas
Importsen WebForm1.aspx.vb:Imports System.Xml Imports System.Text Imports System.Data.SqlClientPegue el siguiente código en el
Page_Loadevento:' 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 dirección URL, donde IISServerName es el nombre del
http://IISServerName/DateTimeXmlConvert/WebForm1.aspxservidor Microsoft Internet Information Services (IIS).
Ahora puede ver que el archivo XML que se representa en el explorador se muestra en formato DateTime personalizado.
Método 2: Aplicar una transformación XSLT en la representación XML de datos DataSet
Puede usar bloques de script en línea 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 en línea. Puede usar objetos de extensión para implementar rutinas personalizadas al diseñar hojas de estilos XSLT portátiles.
Crear un ASP.NET web
Cree un nuevo Visual Basic .NET ASP.NET proyecto de aplicación web denominado DateTimeXSLT.
Agregue una nueva clase denominada DateConvertor.vb al proyecto.
Reemplace el código existente por el siguiente código de la
DateConvertorclase: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 ClassGuarde los cambios en DateConvertor.vb.
Haga clic con el botón secundario en la superficie del diseñador de WebForm1.aspx y, a continuación, haga clic en Ver código.
Agregue el siguiente código al final de la sección de directivas
Importsen WebForm1.aspx.vb:Imports System.IO Imports System.Xml Imports System.Xml.Xsl Imports System.Xml.XPath Imports System.Data.SqlClientPegue el siguiente código en el
Page_Loadevento:' 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.
Crear un documento XSLT de ejemplo
Agregue un nuevo archivo XSLT que se denomina DateTime.xslt al archivo web DateTimeXSLT ASP.NET web Project.
Reemplace el código generado por el código siguiente. (Use el bloc de notas como una herramienta intermedia si experimenta algún problema de codificación o carácter 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.
Probar la transformación XSLT mediante el ASP.NET web form
- Guarde los cambios en el proyecto web DateTimeXSLT ASP.NET web.
- On the Build menu, click Build Solution.
- Inicie Internet Explorer y abra WebForm1.aspx especificando la dirección URL, donde
http://IISServerName/DateTimeXSLT/WebForm1.aspxIISServerName es el nombre del servidor IIS.
Ahora puede ver que dos formatos, el formato de DataSet y el formato transformado DateTime DateTime en la página DateTime WebForm1.aspx.