从 XML 元素解析日期时间
本文关键字:日期 时间 XML 元素 | 更新日期: 2023-09-27 18:32:22
var xml = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
<metadata created=""2014-11-03T18:13:02.769Z"" xmlns=""http://example.com/ns/mmd-2.0#"" xmlns:ext=""http://example.com/ns/ext#-2.0"">
<customer-list count=""112"" offset=""0"">
<customer id=""5f6ab597-f57a-40da-be9e-adad48708203"" type=""Person"" ext:score=""100"">
<name>Bobby Smith</name>
<gender>male</gender>
<country>US</country>
<date-span>
<begin>1965-02-18</begin>
<end>false</end>
</date-span>
</customer>
<customer id=""22"" type=""Person"" ext:score=""100"">
<name>Tina Smith</name>
<gender>Female</gender>
<country>US</country>
<date-span>
<end>false</end>
</date-span>
</customer>
<customer id=""30"" type=""Person"" ext:score=""500"">
<name>George</name>
<gender>Male</gender>
<country>US</country>
<date-span>
<begin>1965</begin>
<end>false</end>
</date-span>
</customer>
</customer-list>
</metadata>";
我使用上面的XML。我遇到的问题是日期(im指的是<date-span> <begin>
元素)可以是任何格式。所以我正在尝试使用以下代码来处理日期格式
GetCustomers = from c in XDoc.Descendants(ns + "customer")
select
new Customer
{
Name = c.Element(ns + "name").Value,
DateOfBirth = Convert.ToDateTime(c.Element(ns + "date-span").Elements(ns + "begin").Any() ? c.Element(ns + "date-span").Element(ns + "begin").Value : DateTime.Now.ToString())
};
上述工作,但在 XML 包含 1965 年后立即崩溃 - 不幸的是,我无法控制 XML。所以我尝试使用 TryParse 将 1965 转换为 dd/mm/1965,其中 dd 和 mm 可以是今天的日期和当前月份,但我似乎无法让它工作:
BeginDate = Convert.ToDateTime(c.Element(ns + "life-span").Elements(ns + "begin").Any() ? DateTime.TryParse( c.Element(ns + "life-span").Element(ns + "begin").Value, culture, styles, out dateResult) : DateTime.Now).ToString())
谁能在这里指导我如何解决问题?
编辑 1
var ModifyBeginDate = XDoc.Descendants(ns + "artist").Elements(ns + "date-span").Elements(ns + "begin");
上面检索了所有日期,但是在将它们更改回XML后如何分配值(我认为我不能在我的代码中使用此变量,因为当我遍历XML时,它会直接返回到原始XML)
如果数据可以是任何格式,那么在尝试将数据解析为 DateTime 之前,您必须对数据进行预处理。
如果我要实现这一点,我要做的第一件事就是将输入分解为一个整数数组,如果数组中只有一个项目,我会检查长度,如果它是 4 长,那么我会假设它是一年并实例化一个新的 DateTime 1 月 1 日, 随着年份。如果我找到一个长度为 4,2,2 或 2,2,4 的数组,我会相应地解析它们 - 显然会有一些可以猜测,但如果你不能控制 xml 的格式,总会有一些机会
您可以使用这样的东西(但修改为仅返回整数类型并跳过可能/
、-
等的拆分类型)将日期时间拆分为包含整数值的数组:https://stackoverflow.com/a/13548184/184746