C# 如果重复节点,则从xml文件获取唯一节点

C# 如果重复节点,则从xml文件获取唯一节点,c#,xml,xmldocument,C#,Xml,Xmldocument,l_NodeToAppend将是UID的第一个。 选择最后一个相同的UID对您有好处吗 XmlNode l_NodeToAppend = null; foreach (XmlNode i in e.SourceModels) { l_NodeToAppend = xDoc.SelectSingleNode(string.Format("//TestModule[@UID='{0}']", i.Attributes["UID"].Value)); if (l_NodeToAppen

l_NodeToAppend将是UID的第一个。 选择最后一个相同的UID对您有好处吗

XmlNode l_NodeToAppend = null;
foreach (XmlNode i in e.SourceModels)
{
    l_NodeToAppend = xDoc.SelectSingleNode(string.Format("//TestModule[@UID='{0}']", i.Attributes["UID"].Value));
    if (l_NodeToAppend != null)
        break;
}

XmlNode l_targetNode = xDoc.SelectSingleNode(string.Format("//TestModule[@UID='{0}']", e.TargetModel.Attributes["UID"].Value));

l_targetNode.ParentNode.InsertBefore(l_NodeToAppend, l_targetNode);

现在还不清楚你想要实现什么。您能否提供预期的结果xml?您可以使用linq吗?您想在示例xml中的何处插入节点?在第一次、第二次或第三次出现之前/之后?我需要在第二次和第三次之间插入第一个节点。您可以使用位置xpath表达式
/TestCase/TestModule[1]
以文档顺序访问节点,它是1-相对的。如果没有唯一的属性组合可供选择,则无法以其他方式唯一访问节点@约翰:这些节点完全相同。如果你改变顺序,一切都不会改变。为什么要这样做?如果必须选择的节点介于两者之间,则可以用任意数字N替换“last()”,但请确保有第N个元素。
XmlNode l_NodeToAppend = null;
foreach (XmlNode i in e.SourceModels)
{
    l_NodeToAppend = xDoc.SelectSingleNode(string.Format("//TestModule[@UID='{0}']", i.Attributes["UID"].Value));
    if (l_NodeToAppend != null)
        break;
}

XmlNode l_targetNode = xDoc.SelectSingleNode(string.Format("//TestModule[@UID='{0}']", e.TargetModel.Attributes["UID"].Value));

l_targetNode.ParentNode.InsertBefore(l_NodeToAppend, l_targetNode);
XmlNode l_targetNode = xDoc.SelectSingleNode(string.Format("//TestModule[@UID='{0}'][last()]", e.TargetModel.Attributes["UID"].Value));