[英]Parse datetime from XML element
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。 我的問題是日期(可以參考<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長,那么我認為它是一年,並實例化帶有年份的1月1日的新DateTime。 如果我發現一個長度為4,2,2或2,2,4的數組,我會據此進行解析-顯然會有一些要猜測,但是如果您無法控制xml的格式,那么總會有剩下的機會
您可以使用類似的方法(但經過修改后僅返回整數類型,並跳過可能為/
, -
等的拆分類型),以將日期時間拆分為包含整數值的數組: https : //stackoverflow.com/一個/十八萬四千七百四十六分之一千三百五十四萬八千一百八十四
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.