Como formatar valores DateTime e Date no XML extraídos de um Conjunto de Dados ADO.NET usando o Visual Basic .NET
Este artigo descreve como formatar DateTime
e Date
valores de DataTable
colunas no XML extraídos de um objeto ADO.NET DataSet
.
Versão original do produto: Visual Basic .NET
Número de KB original: 811767
Resumo
Em ADO.NET, os DateTime
valores e Date
das DataTable
colunas são gravados no XSD DateTime
e Date
nos formatos quando o DataSet
é salvo como XML. O XSD DateTime
padrão e Date
os formatos são CCYY-MM-DDThh:mm:ss e CCYY-MM-DD, respectivamente, porque o esquema XSD subjacente dos DataSet
mapas DateTime
e Date
colunas do banco de dados para os DateTime
tipos de dados XSD Date
e.
Para gerar XML onde DateTime
e Date
valores são representados nos formatos personalizados necessários, use um dos métodos a seguir.
Método 1: usar a classe XmlConvert
Abra o Microsoft Visual Studio .NET. No Visual Basic .NET, crie um novo projeto de aplicativo Web ASP.NET chamado DateTimeXmlConvert.
Clique com o botão direito do mouse na superfície do designer de WebForm1.aspx e clique em Exibir Código.
Adicione o seguinte código ao fim da seção diretivas
Imports
em WebForm1.aspx.vb:Imports System.Xml Imports System.Text Imports System.Data.SqlClient
Cole o seguinte código no
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()
Salve as alterações em WebForm1.aspx.vb.
On the Build menu, click Build Solution.
Inicie o Microsoft Internet Explorer e abra WebForm1.aspx especificando a
http://IISServerName/DateTimeXmlConvert/WebForm1.aspx
URL, em que IISServerName é o nome do servidor Serviços de Informações da Internet da Microsoft (IIS).
Agora você pode ver que o arquivo XML renderizado no navegador é exibido em formato personalizado DateTime
.
Método 2: aplicar uma transformação XSLT na representação XML dos dados dataSet
Você pode usar blocos de script embutidos e componentes de código externos, conhecidos como objetos de Extensão XSLT, para implementar rotinas personalizadas. Elas são invocadas durante um XSLT para executar cálculos e processar dados. A Microsoft recomenda evitar o uso de blocos de script embutidos. Você pode usar objetos de extensão para implementar rotinas personalizadas ao criar planilhas de estilo XSLT portáteis.
Criar um formulário Web ASP.NET
Crie um novo projeto de aplicativo Web do Visual Basic .NET ASP.NET chamado DateTimeXSLT.
Adicione uma nova classe chamada DateConvertor.vb ao projeto.
Substitua o código existente pelo seguinte código na
DateConvertor
classe: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
Salve as alterações em DateConvertor.vb.
Clique com o botão direito do mouse na superfície do designer de WebForm1.aspx e clique em Exibir Código.
Adicione o seguinte código ao fim da seção diretivas
Imports
em WebForm1.aspx.vb:Imports System.IO Imports System.Xml Imports System.Xml.Xsl Imports System.Xml.XPath Imports System.Data.SqlClient
Cole o seguinte código no
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)
Salve as alterações em WebForm1.aspx.vb.
Criar um documento XSLT de exemplo
Adicione um novo arquivo XSLT chamado DateTime.xslt ao DateTimeXSLT ASP.NET Web Project.
Substitua o código gerado pelo código a seguir. (Use o bloco de notas como uma ferramenta intermediária se você tiver problemas de codificação ou caracteres ao tentar colar o código a seguir.)
<?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>
Salve as alterações em DateTime.xslt.
Testar a transformação XSLT usando o formulário Web ASP.NET
- Salve as alterações no projeto Web ASP.NET DateTimeXSLT.
- On the Build menu, click Build Solution.
- Inicie a Internet Explorer e abra WebForm1.aspx especificando a
http://IISServerName/DateTimeXSLT/WebForm1.aspx
URL, em que IISServerName é o nome do servidor IIS.
Agora você pode ver que dois DateTime
formatos, o DateTime
formato do DataSet e o formato transformado DateTime
na página WebForm1.aspx .
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de