我很沮丧。我正在玩xml文件。所以这是我自动创建的xml-File:
<Files>
<Lists>
<oList>
<Object>
<Name>test1</Name>
<DateCreated>2/11/2013 4:35:05 PM</DateCreated>
<DateDeadline>2/17/2013 12:00:00 AM</DateDeadline>
<Reward>none</Reward>
<Description>chocolate amedei 9</Description>
</Object>
</oList>
</Lists>
</Files>
开头的许多开始元素都必须存在,因为我想稍后扩展文件。所以现在我想读取这个xml文件并创建一个类的对象(ThingsToDoObjects,它应该有一天成为待办事项列表),它需要完全存储在xml文件中的参数。此对象应存储在列表中。所以这就是我到目前为止所做的:
XmlDocument xmlListDoc = new XmlDocument();
xmlListDoc.Load(xmlFilePath);
foreach (XmlNode xnode in xmlListDoc.SelectNodes("Files/Lists/oList/Object"))
{
string n = xnode.SelectSingleNode("Name").InnerText.ToString();
DateTime c = Convert.ToDateTime(xnode.SelectSingleNode("DateCreated").InnerText.ToString());
DateTime d = Convert.ToDateTime(xnode.SelectSingleNode("DateDeadline").InnerText.ToString());
string r = xnode.SelectSingleNode("Reward").InnerText.ToString();
string de = xnode.SelectSingleNode("Description").InnerText.ToString();
ThingsToDoObjects NeuObject = new ThingsToDoObjects(n, c, d, r, de);
o.Add(NeuObject);
}
现在我调试时发生以下情况: n被创建得很好,c被创建得很好。但是d只是不起作用。它给出了一个错误:
“字符串未被识别为有效的DateTime”
(这是我对德语的翻译,所以也许错误可能会有所不同。那里发生了什么?我希望我犯了一些愚蠢的错误。
顺便说一句:我尝试了ParseExactly()
方法,但它也没有用,并给出了同样的错误。
提前感谢有人回答。
答案 0 :(得分:4)
(我假设您无法更改XML格式本身。使用标准格式会更好 ,如dtb所示。)
如果您有已知格式的文字,请使用DateTime.ParseExact
或DateTime.TryParseExact
。如果你给他们正确的格式,他们将工作。在这些情况下,我通常也使用不变文化进行解析 - 您不希望用户文化的日期分隔符等混乱。在这种情况下,看起来您想要的格式字符串是"M/d/yyyy h:mm:ss tt"
。
示例代码:
using System;
using System.Globalization;
class Test
{
static void Main()
{
string text = "2/17/2013 12:00:00 AM";
string format = "M/d/yyyy h:mm:ss tt";
DateTime value = DateTime.ParseExact(text, format,
CultureInfo.InvariantCulture,
DateTimeStyles.None);
Console.WriteLine(value);
}
}
如果可以,我还强烈建议使用LINQ to XML。它将使您的XML处理比当前代码简单得多。
答案 1 :(得分:1)
既然你提到从德语翻译,我会假设你在德国。你可能试图将日期解析为“你”。我的意思是使用德语文化格式化程序(dd / mm / yyyy)解析日期,并且没有解析的第17个月。
请尝试使用此代码:
Convert.ToDateTime(value, CultureInfo.InvariantCulture.DateTimeFormat);
答案 2 :(得分:0)
有一个standard way to format date/time values in XML:
<DateCreated>2013-11-02T04:35:05</DateCreated>
您可以使用XmlConvert.ToDateTime Method:
解析此格式DateTime result = XmlConvert.ToDateTime("2013-11-02T04:35:05",
XmlDateTimeSerializationMode.Utc);
或者,更好的是,请查看LINQ-to-XML并使用XElement to DateTime Explicit Conversion:
DateTime result = (DateTime)obj.Element("DateCreated");