检查XML元素是否等于另一个XML元素,忽略空值

Hin*_*nek 6 c# xml

我正在检查string给出的两个XML元素是否与此方法相同:

private static bool XmlEquals(string s1, string s2)
{
    return XNode.DeepEquals(XElement.Parse(s1), XElement.Parse(s2));
}
Run Code Online (Sandbox Code Playgroud)

除非其中一个元素具有开始和结束标记,另一个元素具有如下所示的闭合标记,否则此工作:

<MyElement SomeAttribute="some value" />
<MyElement SomeAttribute="some value"></MyElement>
Run Code Online (Sandbox Code Playgroud)

我能以某种方式比较两个XML元素,上述情况被认为是相同的吗?

def*_*ale 3

解决这个特定问题的直接方法是显式引入右括号

 private static bool XmlEquals(string s1, string s2)
 {
      var firstElement = XElement.Parse(s1);
      var secondElement = XElement.Parse(s2);
      IntroduceClosingBracket(firstElement);
      IntroduceClosingBracket(secondElement);

      return XNode.DeepEquals(firstElement, secondElement);
 }

 private static void IntroduceClosingBracket(XElement element)
 {
      foreach (var descendant in element.DescendantsAndSelf())
      {
           if (descendant.IsEmpty)
           {
                descendant.SetValue(String.Empty);
           }
      }
 }
Run Code Online (Sandbox Code Playgroud)

不过,循环遍历所有后代可能会导致性能下降。