c# - 比较 XML 文件(属性、节点和文本)
问题描述
我知道关于这个主题已经有几个问题,但似乎没有一个解决方案对我有用。我已经尝试过名称中包含 Diff 的所有内容、XMLUnit、FatAntelope、xdocument 等等。这些方法的主要问题是,我要么没有得到我想要的输出,要么根本没有输出。最好的方法是使用以下代码的 XmlDiffLib:
var exampleA = File.ReadAllText(@"Error0.xml");
var exampleB = File.ReadAllText(@"Error1.xml");
var diff = new XmlDiff(exampleA, exampleB);
diff.CompareDocuments(new XmlDiffOptions());
Console.WriteLine(diff.ToString());
Console.ReadLine();
但它只显示我更改的文本(fe <error>TextThatCanBeDetected</error>
)。我还想检查更改的属性 ( <error same="IWantToCheckThisToo"/>
)
Inline Edit diff 也有其他缺陷,例如,如果在新的 XML 中是一个额外的标签,它将不会被识别为一个 End inline edit
我很乐意帮助我解决这个问题,下面是 XML 文件的示例
<?xml version="1.0" encoding="UTF-8"?>
<message>
<header>
</header>
<body>
<error name="MyName"> MyInnerXML </error>
</body>
</message>
(请注意,原始文件长约 100 行)
编辑
所以一个答案是将 CompareDocuments 方法更改为
diff.CompareDocuments(new XmlDiffOptions { IgnoreAttributes=false });
(我使用了 wudri 和 hudri 作为名称标签,它告诉我没有找到 wudri 但没有关于 hudri 的信息)
解决方案
只需指定不忽略 XmlDiffOptions 中的属性:
diff.CompareDocuments(new XmlDiffOptions { IgnoreAttributes = false });
此外,您需要指定比较两个方向以识别不同节点的两个值:
diff.CompareDocuments(new XmlDiffOptions { IgnoreAttributes = false, TwoWayMatch = true });
推荐阅读
- mapstruct - Mapstruct - 更新现有 bean 并忽略一个字段
- c++ - 给定类型 string::size_type,string 也是 C++ 中的命名空间吗?
- c++ - 编程 C++ 的文件流
- ios - 带有 react-native 的 iOS 上的后台任务
- javascript - 我如何知道单击了哪个 HTML 表格列下拉列表
- genesys - Genesys Workspace 桌面版停止服务
- r - 在ggplot中更改标签x轴箱线图
- haskell - 如何在某些文件描述符的子进程中继承打开的文件?
- php - Check for Dimension, Attributes and/ or weight before showing Additional Information in WooCommerce
- c++ - 基于模板类型指针的条件函数行为