簡體   English   中英

從XML元素解析日期時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM