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

  1. Abra o Microsoft Visual Studio .NET. No Visual Basic .NET, crie um novo projeto de aplicativo Web ASP.NET chamado DateTimeXmlConvert.

  2. Clique com o botão direito do mouse na superfície do designer de WebForm1.aspx e clique em Exibir Código.

  3. 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
    
  4. 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()
    
  5. Salve as alterações em WebForm1.aspx.vb.

  6. On the Build menu, click Build Solution.

  7. 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

  1. Crie um novo projeto de aplicativo Web do Visual Basic .NET ASP.NET chamado DateTimeXSLT.

  2. Adicione uma nova classe chamada DateConvertor.vb ao projeto.

  3. 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
    
  4. Salve as alterações em DateConvertor.vb.

  5. Clique com o botão direito do mouse na superfície do designer de WebForm1.aspx e clique em Exibir Código.

  6. 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
    
  7. 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)
    
  8. Salve as alterações em WebForm1.aspx.vb.

Criar um documento XSLT de exemplo

  1. Adicione um novo arquivo XSLT chamado DateTime.xslt ao DateTimeXSLT ASP.NET Web Project.

  2. 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>
    
  3. Salve as alterações em DateTime.xslt.

Testar a transformação XSLT usando o formulário Web ASP.NET

  1. Salve as alterações no projeto Web ASP.NET DateTimeXSLT.
  2. On the Build menu, click Build Solution.
  3. 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 .