【问题标题】:LINQ TO XML, How to replace values with new values c#LINQ TO XML,如何用新值替换值c#
【发布时间】:2012-09-22 18:01:32
【问题描述】:

下面是我的示例 XML 文件:-

我只想在 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>

【问题讨论】:

  • 我更倾向于在这里使用 xpath 而不是 Linq to XML。

标签: c# xml linq


【解决方案1】:

哪些日期值? 全部?具体要素?例如,这会将所有 displayDateTime 元素替换为当前日期 - 采用标准 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);
    }
}

【讨论】:

  • 然后你应该找到所有包含日期​​/时间值的元素名称,你应该确定你想要的日期/时间格式是什么。例如:string text = DateTime.Today.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture);
  • 非常感谢乔恩.. 现在一切都很好.. 但只有一个查询我不想替换时间值.. 我只想替换日期值.. :- )你能建议我前进的方向吗..
  • @Saman:您需要解析现有值,并将一天中的时间添加到DateTime.Today
  • 有人可以告诉我如何使用 c# 将日期值更改为上面发布的 xml 文件的当前日期
  • @Saman:那么您在解析现有值方面走了多远?我已经给了你你需要的格式字符串,但我不会用勺子喂你完整的代码。将问题分解为更小的问题:提取现有值、解析它们、将它们与今天的日期组合、重新格式化。
【解决方案2】:

您可以按照以下方式进行

    [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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2018-05-21
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多