C# - 比较2个XML字符串,每个字符串的时间戳略有不同

时间:2017-01-04 02:58:30

标签: c# xml

如果我有2个XML字符串,除了每个字符串中的时间戳可能略有不同之外,我如何确定它们是否相同?换句话说,我想在进行比较时忽略每个XML中的日期/时间值。

以下是一个示例(显示每个XML的相关部分):

XML 1:

<actionSetID>2017_01_03_20_03_52_04_0001</actionSetID><lastModifiedDateTime dt=""dateTime"">2017-01-03T20:01</lastModifiedDateTime>

XML 2:

<actionSetID>2017_01_03_20_01_07_04_0001</actionSetID><lastModifiedDateTime dt=""dateTime"">2017-01-03T20:03</lastModifiedDateTime>

1 个答案:

答案 0 :(得分:0)

一种方法是将XML字符串解析为XDocuments,并使用Linq删除不需要的节点,然后比较生成的字符串。一个限制是元素必须是相同的顺序。如果你试图比较来自同一来源的xml字符串,虽然这可能是一个合理的期望。

public static void Main()
    {
        var xDoc = XDocument.Parse(xmlString);
        var xDoc1 =  XDocument.Parse(xmlString1);
        Console.WriteLine(xDoc.ToString().Equals(xDoc1.ToString()));
        xDoc.Elements().Elements("lastModifiedDateTime").Remove();
        xDoc1.Elements().Elements("lastModifiedDateTime").Remove();
        Console.WriteLine(xDoc.ToString().Equals(xDoc1.ToString()));
    }
    private static string xmlString = @"<action><actionSetID>2017_01_03_20_03_52_04_0001</actionSetID><lastModifiedDateTime dt=""dateTime"">2017-01-03T20:01</lastModifiedDateTime></action>";
    private static string xmlString1 = @"<action><actionSetID>2017_01_03_20_03_52_04_0001</actionSetID><lastModifiedDateTime dt=""dateTime"">2017-01-03T20:03</lastModifiedDateTime></action>";

输出

False
True