我正在尝试使用 C# 代码比较两个 Xml 文件。
我想忽略 Xml 语法差异(即前缀名称)。
为此我正在使用微软的C# API。
它适用于某些 Xml,但我找不到将其配置为与以下两个 Xml 一起使用的方法:
XML A:
<root xmlns:ns="http://myNs">
<ns:child>1</ns:child>
</root>
XML B:
<root>
<child xmlns="http://myNs">1</child>
</root>
我的问题是:
- 这两个 xml 在语义上是相等的(或同构的),我说得对吗?
- Microsoft 的 XML Diff 和 Patch API 可以配置为支持它吗?
- 还有其他 C# 实用程序可以实现此目的吗?
这些文档是同构的,如下面的程序所示。我想如果你使用XmlDiffOptions.IgnoreNamespaces
and XmlDiffOptions.IgnorePrefixes
配置Microsoft.XmlDiffPatch.XmlDiff
,你得到你想要的结果。
using System.Linq;
using System.Xml.Linq;
namespace SO_794331
{
class Program
{
static void Main(string[] args)
{
var docA = XDocument.Parse(
@"<root xmlns:ns=""http://myNs""><ns:child>1</ns:child></root>");
var docB = XDocument.Parse(
@"<root><child xmlns=""http://myNs"">1</child></root>");
var rootNameA = docA.Root.Name;
var rootNameB = docB.Root.Name;
var equalRootNames = rootNameB.Equals(rootNameA);
var descendantsA = docA.Root.Descendants();
var descendantsB = docB.Root.Descendants();
for (int i = 0; i < descendantsA.Count(); i++)
{
var descendantA = descendantsA.ElementAt(i);
var descendantB = descendantsB.ElementAt(i);
var equalChildNames = descendantA.Name.Equals(descendantB.Name);
var valueA = descendantA.Value;
var valueB = descendantB.Value;
var equalValues = valueA.Equals(valueB);
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)