我正在检查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元素,上述情况被认为是相同的吗?
解决这个特定问题的直接方法是显式引入右括号:
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)
不过,循环遍历所有后代可能会导致性能下降。
| 归档时间: |
|
| 查看次数: |
1893 次 |
| 最近记录: |