Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 使用ASP.NETMVC查询XML文件以提取C中基于日期的值_C#_Xml_Asp.net Mvc_Asp.net Mvc 4_Date - Fatal编程技术网

C# 使用ASP.NETMVC查询XML文件以提取C中基于日期的值

C# 使用ASP.NETMVC查询XML文件以提取C中基于日期的值,c#,xml,asp.net-mvc,asp.net-mvc-4,date,C#,Xml,Asp.net Mvc,Asp.net Mvc 4,Date,我想把几年前我在VB.NET中写的一些代码放在右上方更新。现有站点在加载时所做的是评估今天的日期,并将其放在MVC中母版页布局页面的标题上。我知道怎么做 在日期下方,如果今天是圣诞节、圣帕特里克节或全年超过100个特定日期中的任何一个,它可能会显示一条短的日期特定消息。我在VB.NET中使用了一个Select Case,而Case Else包含定义代码,例如,如果没有为特定日期定义任何内容,那么在夏天还有多少天,或者直到圣诞节。我突然想到,在XML文件中读取日期并设置要在页面HTML中使用的变量

我想把几年前我在VB.NET中写的一些代码放在右上方更新。现有站点在加载时所做的是评估今天的日期,并将其放在MVC中母版页布局页面的标题上。我知道怎么做

在日期下方,如果今天是圣诞节、圣帕特里克节或全年超过100个特定日期中的任何一个,它可能会显示一条短的日期特定消息。我在VB.NET中使用了一个Select Case,而Case Else包含定义代码,例如,如果没有为特定日期定义任何内容,那么在夏天还有多少天,或者直到圣诞节。我突然想到,在XML文件中读取日期并设置要在页面HTML中使用的变量将更容易管理,而不是在现有表单页面上的代码隐藏文件中编辑它。以下是我到目前为止的情况:

XML模式 XML数据文件 我的网页上的代码,将todayMsg插入网页
这是我以前从未做过的,我不知道如何在C或VB.NET中做。有谁能帮助我查询XML文件,提取今天日期的消息(如果有),并将其放在CSHTML页面上,或者放在段落中,或者作为ASP.NET标签的文本。我想这不会那么难。

为您快速拼凑起来,作为如何做到这一点的工作示例

下面将把XML反序列化为两个对象,这两个对象反映了您的XML布局,然后您可以通过数据循环,将日期与当前日期进行比较,如果匹配,则输出消息。这不是世界上最简单的例子,但它确实给了你一个起点

我强烈建议您了解C的工作原理、OOP、对象、反序列化、属性等,这样您就可以了解它的工作原理

虽然我同意Erik Philips在上面的评论中所说的,但我从这样的例子中学到了更好的东西,所以我认为我应该把一些东西放在一起:

public class KeyDates
{
    [XmlElement("DateInfo")]
    public List<DateInfo> DateInfo { get; set; }
}

public class DateInfo
{
    [XmlElement("todayDate")]
    public string todayDate { get; set; }

    [XmlElement("todayMsg")]
    public string todayMsg { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(KeyDates));

        using (FileStream stream = new FileStream("F:\\Data\\Desktop\\ddd.xml", FileMode.Open))
        {
            KeyDates keyDates = (KeyDates)serializer.Deserialize(stream);

            foreach (DateInfo dateInfo in keyDates.DateInfo)
            {
                if (DateTime.Now.ToString("yyyy-MM-dd") == dateInfo.todayDate)
                {
                    Console.WriteLine(dateInfo.todayMsg);
                }
            }

            Console.ReadLine();
        }
    }
}

欢迎来到堆栈溢出。这个问题很可能会被解决。关于堆栈溢出的问题通常包括一个代码示例、您预期会发生什么以及实际发生了什么。如果您根本不知道如何编写c,那么您应该研究internet google和其他堆栈溢出问题作为开始的示例,而不是让其他人来做您的工作;对该项目的支持。我不会这么快完成这项工作。你为什么要结束这次讨论?我在网上读了很多文章,也没有要求你做我的工作。谢谢你教我一种我以前不知道的技术。回答得好@Craig+1,但你可以通过这样做来使用显式转换:KeyDates KeyDates=KeyDatesserializer.Deserializestream;啊,是的,说得好。对我原来的职位所做的调整。
<?xml version="1.0" encoding="utf-8" ?>
<KeyDates>
  <DateInfo>
    <todayDate>2014-07-29</todayDate>
    <todayMsg>First full day of holidays</todayMsg>
  </DateInfo>
  <DateInfo>
    <todayDate>2014-07-30</todayDate>
    <todayMsg>Hope it doesn't rain today</todayMsg>
  </DateInfo>
  <DateInfo>
    <todayDate>2014-07-31</todayDate>
    <todayMsg>Sorry to see the end of July</todayMsg>
  </DateInfo>
...
</KeyDates>
public class KeyDates
{
    [XmlElement("DateInfo")]
    public List<DateInfo> DateInfo { get; set; }
}

public class DateInfo
{
    [XmlElement("todayDate")]
    public string todayDate { get; set; }

    [XmlElement("todayMsg")]
    public string todayMsg { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(KeyDates));

        using (FileStream stream = new FileStream("F:\\Data\\Desktop\\ddd.xml", FileMode.Open))
        {
            KeyDates keyDates = (KeyDates)serializer.Deserialize(stream);

            foreach (DateInfo dateInfo in keyDates.DateInfo)
            {
                if (DateTime.Now.ToString("yyyy-MM-dd") == dateInfo.todayDate)
                {
                    Console.WriteLine(dateInfo.todayMsg);
                }
            }

            Console.ReadLine();
        }
    }
}