C# 如何获取DataSet.ReadXml以将DateTime属性解析为类型化的DateTime
我有一个XML字符串,其中包含格式为“dd/MM/yyyy hh:MM:ss”的日期 我正在使用C# 如何获取DataSet.ReadXml以将DateTime属性解析为类型化的DateTime,c#,asp.net,xml,datetime,dataset,C#,Asp.net,Xml,Datetime,Dataset,我有一个XML字符串,其中包含格式为“dd/MM/yyyy hh:MM:ss”的日期 我正在使用dataset.ReadXml()将此XML加载到数据集中 如何确保此日期作为类型化日期时间存储在数据集中,以便对其进行排序、格式化和行筛选 我的测试线束如下所示: ASPX页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XmlDateTypeList.aspx.cs" Inherits="Test.XmlDateTyp
dataset.ReadXml()
将此XML加载到数据集中
如何确保此日期作为类型化日期时间存储在数据集中,以便对其进行排序、格式化和行筛选
我的测试线束如下所示:
ASPX页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XmlDateTypeList.aspx.cs" Inherits="Test.XmlDateTypeList" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Test</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Date" HeaderText="Date" DataFormatString="{0:dddd dd MMMM yyyy}" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
这很痛苦,但根本问题是,在这种情况下,xml数据不能是强类型的,因为日期格式不是
xs:date
格式,并且一旦数据在数据集中,就不能更改类型。更复杂的是.NET不会将“28/01/2010 00:00:00”自动格式化为日期。因此,只需使用正确的数据类型从一个数据表复制到另一个数据表,并在此过程中重新格式化日期字符串。这段代码可以工作,但远远不够优雅。祝你好运
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using System.Data;
using System.IO;
public partial class xmltest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XDocument xDoc = new XDocument(
new XElement("List",
new XElement("Item",
new XAttribute("Name", "A"),
new XAttribute("Date", "21/01/2010 00:00:00")
),
new XElement("Item",
new XAttribute("Name", "B"),
new XAttribute("Date", "12/01/2010 00:00:00")
),
new XElement("Item",
new XAttribute("Name", "C"),
new XAttribute("Date", "10/01/2010 00:00:00")
),
new XElement("Item",
new XAttribute("Name", "D"),
new XAttribute("Date", "28/01/2010 12:33:22")
)
)
);
DataSet dataSet = new DataSet();
dataSet.ReadXml(new StringReader(xDoc.ToString()));
DataSet dataSet2 = dataSet.Clone();
dataSet2.Tables[0].Columns[1].DataType = typeof(DateTime);
// painful, painful copy over code from dataset1 to dataset2
foreach (DataRow r in dataSet.Tables[0].Rows)
{
DataRow newRow = dataSet2.Tables[0].NewRow();
newRow["name"] = r["name"];
newRow["Date"] = DateTime.ParseExact(r["Date"].ToString(), "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
dataSet2.Tables[0].Rows.Add(newRow);
}
GridView1.DataSource = dataSet2.Tables[0];
GridView1.DataBind();
}
}
这很痛苦,但根本问题是,在这种情况下,xml数据不能是强类型的,因为日期格式不是
xs:date
格式,并且一旦数据在数据集中,就不能更改类型。更复杂的是.NET不会将“28/01/2010 00:00:00”自动格式化为日期。因此,只需使用正确的数据类型从一个数据表复制到另一个数据表,并在此过程中重新格式化日期字符串。这段代码可以工作,但远远不够优雅。祝你好运
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using System.Data;
using System.IO;
public partial class xmltest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XDocument xDoc = new XDocument(
new XElement("List",
new XElement("Item",
new XAttribute("Name", "A"),
new XAttribute("Date", "21/01/2010 00:00:00")
),
new XElement("Item",
new XAttribute("Name", "B"),
new XAttribute("Date", "12/01/2010 00:00:00")
),
new XElement("Item",
new XAttribute("Name", "C"),
new XAttribute("Date", "10/01/2010 00:00:00")
),
new XElement("Item",
new XAttribute("Name", "D"),
new XAttribute("Date", "28/01/2010 12:33:22")
)
)
);
DataSet dataSet = new DataSet();
dataSet.ReadXml(new StringReader(xDoc.ToString()));
DataSet dataSet2 = dataSet.Clone();
dataSet2.Tables[0].Columns[1].DataType = typeof(DateTime);
// painful, painful copy over code from dataset1 to dataset2
foreach (DataRow r in dataSet.Tables[0].Rows)
{
DataRow newRow = dataSet2.Tables[0].NewRow();
newRow["name"] = r["name"];
newRow["Date"] = DateTime.ParseExact(r["Date"].ToString(), "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
dataSet2.Tables[0].Rows.Add(newRow);
}
GridView1.DataSource = dataSet2.Tables[0];
GridView1.DataBind();
}
}
XML不能是强类型的是什么意思?问题是XML数据不包含有效的日期。在XML中,日期有一种精确的表示形式,那不是。如果您想让希望XML遵循XML标准的工具将字符串视为日期,请在XML模式中查找
xs:Date
格式。好的,我将更新我的答案,您可以键入XML日期,但不能在示例中键入,因为日期的格式很奇怪。这是一个有效的日期(这是英国的标准日期),但不是每个XML模式的有效日期。最后,我在xslt中使用字符串操作将日期转换为正确的格式,然后加载xsd以告诉数据集这是一个日期?问题是XML数据不包含有效的日期。在XML中,日期有一种精确的表示形式,那不是。如果您想让希望XML遵循XML标准的工具将字符串视为日期,请在XML模式中查找xs:Date
格式。好的,我将更新我的答案,您可以键入XML日期,但不能在示例中键入,因为日期的格式很奇怪。这是一个有效的日期(这是英国的标准日期),但不是每个XML模式的有效日期。最后,我实际上使用xslt中的字符串操作将日期转换为正确的格式,然后加载xsd以告诉数据集这是一个日期。