2015-09-28 93 views
0

我有帶有日期時間字段的Customer XML,但有時只有日期。我只需要日期時間字段和日期字段的結果。 (這個xml我的帽子工作多得多,並且嵌套)使用XDocument解析xml將日期轉換爲datetime

我認爲有一種更好的方式,那麼我的蠻力嘗試。

xml = "<root><date>2003-07-15T10:00:00</date><enddate>2016-02-02</enddate><startdate>2000-02-10</startdate></root>"; 
string result = string.Empty; 
if (!string.IsNullOrWhiteSpace(xml)) 
{ 
    XDocument doc = XDocument.Parse(xml); 
    string xml1 = doc.ToString(); 
    Regex rgx = new Regex(@">(\d{4}-\d\d-\d\d)</"); 
    result = rgx.Replace(xml1, ">$1T00:00:00</"); 
} 
+0

XML是如何生成的?你有任何控制權?你提到XDocument和Linq-to-xml - 你是如何生成它的? – simonalexander2005

+0

同意。如果可能的話,修復XML是解決此問題的正確方法,而不是編寫代碼來解決無效文檔。試圖修復不一致的數據通常會導致意大利麪代碼和令人頭痛的問題(例如,當其他日期格式在XML中結束時,因爲擁有的開發人員不遵循約定)。 – DVK

+0

沒有必要修復,不應該修復。您需要時區來防止錯誤。沒有時區,你會得到錯誤的日期。只需閱讀日期並解析爲DateTime對象,該對象將日期轉換爲正確的實際日期。 – jdweng

回答

1

這是你的意思嗎?

string xml = @"<root><date>2003-07-15T10:00:00</date> 
<enddate>2016-02-02</enddate> 
<startdate>2000-02-10</startdate> 
</root>"; 

    XDocument doc = XDocument.Parse(xml); 

    DateTime t; 
    doc 
    .DescendantNodes() 
    .Where (d => d.NodeType == XmlNodeType.Text && 
     DateTime.TryParse(d.ToString(),out t)) 
    .ToList() 
    .ForEach(n => n.Parent.SetValue(DateTime.Parse(n.ToString()))); 
+0

完美!我沒有想到這個內容中的'DateTime.TryParse'。 – Lebewesen