【发布时间】:2017-04-28 08:53:19
【问题描述】:
<TestCase name="TestCase2" UID="8eb5d202-1559-47b3-b39e-21e46d0bc9d2" State="Checked" DataSourceId="">
<TestModule name="Recording1" State="Checked" UID="2">
</TestModule>
<TestModule name="Recording1" State="Checked" UID="2">
</TestModule>
<TestModule name="Recording1" State="Checked" UID="2">
</TestModule>
</TestCase>
在上面的 xml 中,我有多个具有相同名称和 UID 的节点,需要在第二个和第三个之间插入第一个节点但它失败了,因为 l_NodeToAppend 和 l_targetNode 相同,如果节点重复,我应该如何识别节点。
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 中的何处插入节点?在第一次、第二次或第三次出现之前/之后?
-
我需要在 Second 和 Third 之间插入 First 节点
-
您可以使用位置 xpath 表达式
/TestCase/TestModule[1]按文档顺序访问节点,它是 1 相对的。如果没有唯一的属性组合可供选择,您将无法唯一地访问节点! -
@John 这些节点是完全一样的。如果你改变顺序,什么都不会改变。你为什么要这么做?
标签: c# xml xmldocument