Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取DataSet.ReadXml以将DateTime属性解析为类型化的DateTime_C#_Asp.net_Xml_Datetime_Dataset - Fatal编程技术网

C# 如何获取DataSet.ReadXml以将DateTime属性解析为类型化的DateTime

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

我有一个XML字符串,其中包含格式为“dd/MM/yyyy hh:MM:ss”的日期

我正在使用
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以告诉数据集这是一个日期。