2012-07-24 24 views
2

下面是我的示例XML文件: -的LINQ to XML,如何更換使用新值值C#

我只是想在C#中使用LINQ to XML當前日期更換日期值。

<?xml version="1.0" encoding="UTF-8"?> 
<BasicImport xmlns="http://www.uk.SSp.com/SSR/XTI/Traffic/0010" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.uk.nds.com/SSR/XTI/Traffic/0010 0010.xsd" utcOffset="+05:30" frameRate="25"> 
    <SiEventSchedule deleteStart="2012/01/21 00:00:00" deleteEnd="2012/01/21 23:59:59"> 
    <siService>Ssp</siService> 
    <playoutSource>Ssp</playoutSource> 
    <activationSourceId>0</activationSourceId> 
    <CaSchedule deleteStart="2012/01/21 00:00:00" deleteEnd="2012/01/21 23:59:59" /> 
    <SiEvent> 
     <displayDateTime>2012/01/21 00:00:00</displayDateTime> 
     <activationDateTime>2012/01/21 00:00:00</activationDateTime> 
     <displayDuration>00:30:00</displayDuration> 
     <siTrafficKey>056049263</siTrafficKey> 
     <detailKey>056049263 2012-07-12</detailKey> 
    </SiEvent> 
    </SiEventSchedule> 
</BasicImport> 
+0

我會更傾向於使用XPath,而不是LINQ到這裏XML。 – 2012-07-24 19:32:08

回答

5

哪個日期值? 全部是其中?具體要素?例如,這將用當前日期替換所有​​元素 - 以標準XML格式,其中不是您的源XML包含的內容...如果您要使用其他格式,則應使用DateTime.ToString並將內容替換爲元素與相關文字。

using System; 
using System.Linq; 
using System.Xml.Linq; 

class Test 
{ 
    static void Main() 
    { 
     XNamespace ns = "http://www.uk.ssp.com/SSR/XTI/Traffic/0010"; 
     XDocument doc = XDocument.Load("ssp.xml"); 

     var elements = doc.Descendants(ns + "displayDateTime") 
          .ToList(); 

     var today = DateTime.Today; 
     foreach (var element in elements) 
     { 
      element.ReplaceAll(today); 
     } 
     Console.WriteLine(doc); 
    } 
} 
+0

我想要的格式與之前的XML格式相同。 – Saman 2012-07-24 18:56:35

+0

然後,您應該找到所有包含日期​​/時間值的元素名稱,並且您應該確切確定所需的日期/時間格式。例如:'string text = DateTime.Today.ToString(「yyyy/MM/dd HH:mm:ss」,CultureInfo.InvariantCulture);' – 2012-07-24 18:58:15

+0

非常感謝jon ..現在每一件事情都很好...... 但只有一個查詢我不想取代時間價值..我只想取代日期價值.. :-)你可以請建議我一種前進的方式.. – Saman 2012-07-24 19:54:58

3

你可以做以下方式

[Test] 
    public void Test() 
    { 
     XElement root = XElement.Load("Data.xml"); 
     root.Descendants() 
      .Where(x => x.Name.LocalName == "displayDateTime") 
      .ToList() 
      .ForEach(x => x.ReplaceNodes(GetDate(x))); 
    } 

    private static DateTime GetDate(XElement element) 
    { 
     return DateTime.Today.Add(DateTime.Parse(element.Value).TimeOfDay); 
    }