Поделиться через


Форматирование значений DateTime и Date в XML, извлеченных из набора данных ADO.NET с помощью Visual Basic .NET

В этой статье описывается форматирование DateTime и Date значения DataTable столбцов в XML-файле, извлеченном из объекта ADO.NET DataSet .

Исходная версия продукта: Visual Basic .NET
Исходный номер базы знаний: 811767

Итоги

В ADO.NET DateTimeDateDataTable столбцы записываются в XSD DateTime и Date форматы при DataSet сохранении в формате XML. Стандартные XSD DateTime и форматы — CCYY-MM-DDThh:mm:ss и CCYY-MM-DD соответственно, так как базовая схема DataSet XSD сопоставляет DateTime и столбцы базы данных с DateDateTime типами данных XSDDate.Date

Чтобы создать XML,где DateTime и Date значения представлены в необходимых пользовательских форматах, используйте один из следующих методов.

Метод 1. Использование класса XmlConvert

  1. Откройте Microsoft Visual Studio .NET. В Visual Basic .NET создайте проект веб-приложения ASP.NET с именем DateTimeXmlConvert.

  2. Щелкните правой кнопкой мыши область конструктора WebForm1.aspx и выберите команду "Просмотреть код".

  3. Добавьте следующий код в конец Imports раздела директив в WebForm1.aspx.vb:

    Imports System.Xml
    Imports System.Text
    Imports System.Data.SqlClient
    
  4. Вставьте следующий код в Page_Load событие:

    ' 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. Сохраните изменения в WebForm1.aspx.vb.

  6. В меню Сборка выберите Построить решение.

  7. Запустите Microsoft Internet Explorer и откройте WebForm1.aspx, указав http://IISServerName/DateTimeXmlConvert/WebForm1.aspx URL-адрес, где IISServerName — имя сервера Microsoft IIS (IIS).

Теперь можно увидеть, что XML-файл, отрисованный в браузере, отображается в пользовательском DateTime формате.

Метод 2. Применение преобразования XSLT к XML-представлению данных DataSet

Для реализации пользовательских подпрограмм можно использовать встроенные блоки скриптов и внешние компоненты кода, известные как объекты расширения XSLT. Они вызываются во время XSLT для выполнения вычислений и обработки данных. Корпорация Майкрософт рекомендует избегать использования встроенных блоков скриптов. Объекты расширения можно использовать для реализации пользовательских подпрограмм при разработке переносимых таблиц стилей XSLT.

Создание веб-формы ASP.NET

  1. Создайте проект веб-приложения Visual Basic для .NET ASP.NET с именем DateTimeXSLT.

  2. Добавьте в проект новый класс с именем DateConvertor.vb .

  3. Замените существующий код следующим кодом в DateConvertor классе:

    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. Сохраните изменения в DateConvertor.vb.

  5. Щелкните правой кнопкой мыши область конструктора WebForm1.aspx и выберите команду "Просмотреть код".

  6. Добавьте следующий код в конец Imports раздела директив в WebForm1.aspx.vb:

    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Xsl
    Imports System.Xml.XPath
    Imports System.Data.SqlClient
    
  7. Вставьте следующий код в Page_Load событие:

    ' 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. Сохраните изменения в WebForm1.aspx.vb.

Создание примера документа XSLT

  1. Добавьте новый XSLT-файл с именем DateTime.xslt в веб-проект DateTimeXSLT ASP.NET.

  2. Замените созданный код следующим кодом. (Если при попытке вставить следующий код, используйте блокнот в качестве промежуточного инструмента.

    <?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. Сохраните изменения в DateTime.xslt.

Тестирование преобразования XSLT с помощью веб-формы ASP.NET

  1. Сохраните изменения в веб-проекте DateTimeXSLT ASP.NET.
  2. В меню Сборка выберите Построить решение.
  3. Запустите Internet Explorer и откройте WebForm1.aspx , указав http://IISServerName/DateTimeXSLT/WebForm1.aspx URL-адрес, где IISServerName — имя сервера IIS.

Теперь можно увидеть, что два DateTime формата, DateTime формат DataSet и преобразованный DateTime формат на странице WebForm1.aspx .