Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается форматирование DateTime
и Date
значения DataTable
столбцов в XML-файле, извлеченном из объекта ADO.NET DataSet
.
Исходная версия продукта: Visual Basic .NET
Исходный номер базы знаний: 811767
Итоги
В ADO.NET DateTime
Date
DataTable
столбцы записываются в XSD DateTime
и Date
форматы при DataSet
сохранении в формате XML. Стандартные XSD DateTime
и форматы — CCYY-MM-DDThh:mm:ss и CCYY-MM-DD соответственно, так как базовая схема DataSet
XSD сопоставляет DateTime
и столбцы базы данных с Date
DateTime
типами данных XSDDate
.Date
Чтобы создать XML,где DateTime
и Date
значения представлены в необходимых пользовательских форматах, используйте один из следующих методов.
Метод 1. Использование класса XmlConvert
Откройте Microsoft Visual Studio .NET. В Visual Basic .NET создайте проект веб-приложения ASP.NET с именем DateTimeXmlConvert.
Щелкните правой кнопкой мыши область конструктора WebForm1.aspx и выберите команду "Просмотреть код".
Добавьте следующий код в конец
Imports
раздела директив в WebForm1.aspx.vb:Imports System.Xml Imports System.Text Imports System.Data.SqlClient
Вставьте следующий код в
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()
Сохраните изменения в WebForm1.aspx.vb.
В меню Сборка выберите Построить решение.
Запустите 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
Создайте проект веб-приложения Visual Basic для .NET ASP.NET с именем DateTimeXSLT.
Добавьте в проект новый класс с именем DateConvertor.vb .
Замените существующий код следующим кодом в
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
Сохраните изменения в DateConvertor.vb.
Щелкните правой кнопкой мыши область конструктора WebForm1.aspx и выберите команду "Просмотреть код".
Добавьте следующий код в конец
Imports
раздела директив в WebForm1.aspx.vb:Imports System.IO Imports System.Xml Imports System.Xml.Xsl Imports System.Xml.XPath Imports System.Data.SqlClient
Вставьте следующий код в
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)
Сохраните изменения в WebForm1.aspx.vb.
Создание примера документа XSLT
Добавьте новый XSLT-файл с именем DateTime.xslt в веб-проект DateTimeXSLT ASP.NET.
Замените созданный код следующим кодом. (Если при попытке вставить следующий код, используйте блокнот в качестве промежуточного инструмента.
<?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>
Сохраните изменения в DateTime.xslt.
Тестирование преобразования XSLT с помощью веб-формы ASP.NET
- Сохраните изменения в веб-проекте DateTimeXSLT ASP.NET.
- В меню Сборка выберите Построить решение.
- Запустите Internet Explorer и откройте WebForm1.aspx , указав
http://IISServerName/DateTimeXSLT/WebForm1.aspx
URL-адрес, где IISServerName — имя сервера IIS.
Теперь можно увидеть, что два DateTime
формата, DateTime
формат DataSet и преобразованный DateTime
формат на странице WebForm1.aspx .